<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Chapter 1 General Information</title>
<link rel="stylesheet" href="mvl.css" type="text/css" />
<meta name="generator" content="DocBook XSL Stylesheets + chunker.py v1.9.2" />
<link rel="start" href="index.html" title="{book-title}" />
<link rel="up" href="" title="" />
<link rel="prev" href="preface.html" title=" Preface and Legal Notices" />
<link rel="next" href="installing.html" title="Chapter 2 Installing and Upgrading MySQL" />
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr>
<th colspan="3" align="center">Chapter 1 General Information</th>
</tr>
<tr>
<td width="20%" align="left"><a accesskey="p" href="preface.html">Prev</a> </td>
<th width="60%" align="center"></th>
<td width="20%" align="right"> <a accesskey="n" href="installing.html">Next</a></td>
</tr>
</table>
<hr>
</div>
<div class="chapter">
<div class="titlepage">
<div>
<div>
<h1 class="title"><a name="introduction"></a>Chapter 1 General Information</h1>

</div>

</div>

</div>
<div class="toc">
<p><b>Table of Contents</b></p><dl class="toc"><dt><span class="section"><a href="introduction.html#manual-info">1.1 About This Manual</a></span></dt><dt><span class="section"><a href="introduction.html#manual-conventions">1.2 Typographical and Syntax Conventions</a></span></dt><dt><span class="section"><a href="introduction.html#what-is">1.3 Overview of the MySQL Database Management System</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.html#what-is-mysql">1.3.1 What is MySQL?</a></span></dt><dt><span class="section"><a href="introduction.html#features">1.3.2 The Main Features of MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#history">1.3.3 History of MySQL</a></span></dt></dl></dd><dt><span class="section"><a href="introduction.html#mysql-nutshell">1.4 What Is New in MySQL 8.0</a></span></dt><dt><span class="section"><a href="introduction.html#added-deprecated-removed">1.5 Server and Status Variables and Options Added, Deprecated, or Removed in
MySQL 8.0</a></span></dt><dt><span class="section"><a href="introduction.html#information-sources">1.6 MySQL Information Sources</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.html#mysql-web-sites">1.6.1 MySQL Websites</a></span></dt><dt><span class="section"><a href="introduction.html#mailing-lists">1.6.2 MySQL Mailing Lists</a></span></dt><dt><span class="section"><a href="introduction.html#forums">1.6.3 MySQL Community Support at the MySQL Forums</a></span></dt><dt><span class="section"><a href="introduction.html#irc">1.6.4 MySQL Community Support on Internet Relay Chat (IRC)</a></span></dt><dt><span class="section"><a href="introduction.html#mysql-enterprise-information">1.6.5 MySQL Enterprise</a></span></dt></dl></dd><dt><span class="section"><a href="introduction.html#bug-reports">1.7 How to Report Bugs or Problems</a></span></dt><dt><span class="section"><a href="introduction.html#compatibility">1.8 MySQL Standards Compliance</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.html#extensions-to-ansi">1.8.1 MySQL Extensions to Standard SQL</a></span></dt><dt><span class="section"><a href="introduction.html#differences-from-ansi">1.8.2 MySQL Differences from Standard SQL</a></span></dt><dt><span class="section"><a href="introduction.html#constraints">1.8.3 How MySQL Deals with Constraints</a></span></dt></dl></dd><dt><span class="section"><a href="introduction.html#credits">1.9 Credits</a></span></dt><dd><dl><dt><span class="section"><a href="introduction.html#contributors">1.9.1 Contributors to MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#documenters-translators">1.9.2 Documenters and translators</a></span></dt><dt><span class="section"><a href="introduction.html#packages">1.9.3 Packages that support MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#tools-used-to-create-mysql">1.9.4 Tools that were used to create MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#supporters">1.9.5 Supporters of MySQL</a></span></dt></dl></dd></dl>
</div>
<a class="indexterm" name="idm139899668613056"></a><a class="indexterm" name="idm139899668611936"></a><p>
    The MySQL™ software delivers a very fast, multi-threaded,
    multi-user, and robust SQL (Structured Query Language) database
    server. MySQL Server is intended for mission-critical, heavy-load
    production systems as well as for embedding into mass-deployed
    software. Oracle is a registered trademark of Oracle Corporation
    and/or its affiliates. MySQL is a trademark of Oracle Corporation
    and/or its affiliates, and shall not be used by Customer without
    Oracle's express written authorization. Other names may be
    trademarks of their respective owners.
  </p><p>
    The MySQL software is Dual Licensed. Users can choose to use the
    MySQL software as an Open Source product under the terms of the GNU
    General Public License (<a class="ulink" href="http://www.fsf.org/licenses/" target="_top">http://www.fsf.org/licenses/</a>)
    or can purchase a standard commercial license from Oracle. See
    <a class="ulink" href="http://www.mysql.com/company/legal/licensing/" target="_top">http://www.mysql.com/company/legal/licensing/</a> for
    more information on our licensing policies.
  </p><p>
    The following list describes some sections of particular interest in
    this manual:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        For a discussion of MySQL Database Server capabilities, see
        <a class="xref" href="introduction.html#features" title="1.3.2 The Main Features of MySQL">Section 1.3.2, “The Main Features of MySQL”</a>.
      </p></li><li class="listitem"><p>
        For an overview of new MySQL features, see
        <a class="xref" href="introduction.html#mysql-nutshell" title="1.4 What Is New in MySQL 8.0">Section 1.4, “What Is New in MySQL 8.0”</a>. For information about the
        changes in each version, see the
        <a class="ulink" href="http://dev.mysql.com/doc/relnotes/mysql/8.0/en/" target="_top">Release
        Notes</a>.
      </p></li><li class="listitem"><p>
        For installation instructions, see <a class="xref" href="installing.html" title="Chapter 2 Installing and Upgrading MySQL">Chapter 2, <i>Installing and Upgrading MySQL</i></a>.
        For information about upgrading MySQL, see
        <a class="xref" href="installing.html#upgrading" title="2.11.1 Upgrading MySQL">Section 2.11.1, “Upgrading MySQL”</a>.
      </p></li><li class="listitem"><p>
        For a tutorial introduction to the MySQL Database Server, see
        <a class="xref" href="tutorial.html" title="Chapter 3 Tutorial">Chapter 3, <i>Tutorial</i></a>.
      </p></li><li class="listitem"><p>
        For information about configuring and administering MySQL
        Server, see <a class="xref" href="server-administration.html" title="Chapter 5 MySQL Server Administration">Chapter 5, <i>MySQL Server Administration</i></a>.
      </p></li><li class="listitem"><p>
        For information about security in MySQL, see
        <a class="xref" href="security.html" title="Chapter 6 Security">Chapter 6, <i>Security</i></a>.
      </p></li><li class="listitem"><p>
        For information about setting up replication servers, see
        <a class="xref" href="replication.html" title="Chapter 17 Replication">Chapter 17, <i>Replication</i></a>.
      </p></li><li class="listitem"><p>
        For information about MySQL Enterprise, the commercial MySQL
        release with advanced features and management tools, see
        <a class="xref" href="mysql-enterprise.html" title="Chapter 29 MySQL Enterprise Edition">Chapter 29, <i>MySQL Enterprise Edition</i></a>.
      </p></li><li class="listitem"><p>
        For answers to a number of questions that are often asked
        concerning the MySQL Database Server and its capabilities, see
        <a class="xref" href="faqs.html" title="Appendix A MySQL 8.0 Frequently Asked Questions">Appendix A, <i>MySQL 8.0 Frequently Asked Questions</i></a>.
      </p></li><li class="listitem"><p>
        For a history of new features and bug fixes, see the
        <a class="ulink" href="http://dev.mysql.com/doc/relnotes/mysql/8.0/en/" target="_top">Release
        Notes</a>.
</p></li></ul>
</div>
<a class="indexterm" name="idm139899663061504"></a><a class="indexterm" name="idm139899663060112"></a><a class="indexterm" name="idm139899663058720"></a><a class="indexterm" name="idm139899663057328"></a>
<div class="important" style="margin-left: 0.5in; margin-right: 0.5in;">

<div class="admon-title">
Important
</div>
<p>
      To report problems or bugs, please use the instructions at
      <a class="xref" href="introduction.html#bug-reports" title="1.7 How to Report Bugs or Problems">Section 1.7, “How to Report Bugs or Problems”</a>. If you find a sensitive security
      bug in MySQL Server, please let us know immediately by sending an
      email message to <code class="email">&lt;<a class="email" href="mailto:secalert_us@oracle.com">secalert_us@oracle.com</a>&gt;</code>. Exception:
      Support customers should report all problems, including security
      bugs, to Oracle Support.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="manual-info"></a>1.1 About This Manual</h2>

</div>

</div>

</div>
<a class="indexterm" name="idm139899663053040"></a><a class="indexterm" name="idm139899663052032"></a><p>
      This is the Reference Manual for the MySQL Database System,
      version 8.0, through release 8.0.13.
      Differences between minor versions of MySQL 8.0 are
      noted in the present text with reference to release numbers
      (8.0.<em class="replaceable"><code>x</code></em>). For license
      information, see the <a class="link" href="preface.html#legalnotice" title="Legal Notices">Legal
      Notices</a>.
    </p><p>
      This manual is not intended for use with older versions of the
      MySQL software due to the many functional and other differences
      between MySQL 8.0 and previous versions. If you are
      using an earlier release of the MySQL software, please refer to
      the appropriate manual. For example,
      <a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/" target="_top"><em class="citetitle">MySQL 5.7 Reference Manual</em></a>
      covers the 5.7 series of MySQL software releases.
    </p><p>
      Because this manual serves as a reference, it does not provide
      general instruction on SQL or relational database concepts. It
      also does not teach you how to use your operating system or
      command-line interpreter.
    </p><p>
      The MySQL Database Software is under constant development, and the
      Reference Manual is updated frequently as well. The most recent
      version of the manual is available online in searchable form at
      <a class="ulink" href="http://dev.mysql.com/doc/" target="_top">http://dev.mysql.com/doc/</a>. Other formats also are available
      there, including HTML, PDF, and EPUB versions.
    </p><a class="indexterm" name="idm139899663044864"></a><a class="indexterm" name="idm139899663043472"></a><p>
      The Reference Manual source files are written in DocBook XML
      format. The HTML version and other formats are produced
      automatically, primarily using the DocBook XSL stylesheets. For
      information about DocBook, see <a class="ulink" href="http://docbook.org/" target="_top">http://docbook.org/</a>
    </p><p>
      The source code for MySQL itself contains internal documentation
      written using Doxygen. The generated Doxygen content is available
      at <a class="ulink" href="http://dev.mysql.com/doc/dev/mysql-server/latest/" target="_top">http://dev.mysql.com/doc/dev/mysql-server/latest/</a>. It is also
      possible to generate this content locally from a MySQL source
      distribution using the instructions at
      <a class="xref" href="installing.html#source-installation-doxygen" title="2.9.7 Generating MySQL Doxygen Documentation Content">Section 2.9.7, “Generating MySQL Doxygen Documentation Content”</a>.
    </p><p>
      If you have questions about using MySQL, you can ask them using
      our mailing lists or forums. See <a class="xref" href="introduction.html#mailing-lists" title="1.6.2 MySQL Mailing Lists">Section 1.6.2, “MySQL Mailing Lists”</a>,
      and <a class="xref" href="introduction.html#forums" title="1.6.3 MySQL Community Support at the MySQL Forums">Section 1.6.3, “MySQL Community Support at the MySQL Forums”</a>. If you have suggestions concerning
      additions or corrections to the manual itself, please send them to
      the <a class="ulink" href="http://www.mysql.com/company/contact/" target="_top">http://www.mysql.com/company/contact/</a>.
    </p><p>
      This manual was originally written by David Axmark and Michael
      <span class="quote">“<span class="quote">Monty</span>”</span> Widenius. It is maintained by the MySQL
      Documentation Team, consisting of Chris Cole, Paul DuBois,
      Margaret Fisher, Edward Gilmore, Stefan Hinz, David Moss, Philip
      Olson, Daniel Price, Daniel So, and Jon Stephens.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="manual-conventions"></a>1.2 Typographical and Syntax Conventions</h2>

</div>

</div>

</div>
<p>
    This manual uses certain typographical conventions:
</p><a class="indexterm" name="idm139899663034272"></a><a class="indexterm" name="idm139899663032880"></a><a class="indexterm" name="idm139899663031872"></a><a class="indexterm" name="idm139899663030480"></a><a class="indexterm" name="idm139899663029088"></a><a class="indexterm" name="idm139899663028080"></a>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        <code class="literal">Text in this style</code> is used for SQL
        statements; database, table, and column names; program listings
        and source code; and environment variables. Example: <span class="quote">“<span class="quote">To
        reload the grant tables, use the <a class="link" href="sql-syntax.html#flush-privileges"><code class="literal">FLUSH
        PRIVILEGES</code></a> statement.</span>”</span>
      </p></li><li class="listitem"><p>
        <strong class="userinput"><code>Text in this style</code></strong> indicates input that
        you type in examples.
      </p></li><li class="listitem"><p>
        <span class="command"><strong>Text in this style</strong></span> indicates the names of
        executable programs and scripts, examples being
        <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Tool"><span class="command"><strong>mysql</strong></span></a> (the MySQL command-line client program)
        and <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> (the MySQL server executable).
      </p></li><li class="listitem"><p>
        <em class="replaceable"><code>Text in this style</code></em> is used for
        variable input for which you should substitute a value of your
        own choosing.
      </p></li><li class="listitem"><p>
        <span class="emphasis"><em>Text in this style</em></span> is used for emphasis.
      </p></li><li class="listitem"><p>
        <span class="bold"><strong>Text in this style</strong></span> is used in
        table headings and to convey especially strong emphasis.
      </p></li><li class="listitem"><p>
        <code class="option">Text in this style</code> is used to indicate a
        program option that affects how the program is executed, or that
        supplies information that is needed for the program to function
        in a certain way. <span class="emphasis"><em>Example</em></span>: <span class="quote">“<span class="quote">The
        <code class="option">--host</code> option (short form <code class="option">-h</code>)
        tells the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Tool"><span class="command"><strong>mysql</strong></span></a> client program the hostname
        or IP address of the MySQL server that it should connect
        to</span>”</span>.
      </p></li><li class="listitem"><p>
        File names and directory names are written like this: <span class="quote">“<span class="quote">The
        global <code class="filename">my.cnf</code> file is located in the
        <code class="filename">/etc</code> directory.</span>”</span>
      </p></li><li class="listitem"><p>
        Character sequences are written like this: <span class="quote">“<span class="quote">To specify a
        wildcard, use the <span class="quote">‘<span class="quote"><code class="literal">%</code></span>’</span>
        character.</span>”</span>
</p></li></ul>
</div>
<p>
    When commands are shown that are meant to be executed from within a
    particular program, the prompt shown preceding the command indicates
    which command to use. For example, <code class="literal">shell&gt;</code>
    indicates a command that you execute from your login shell,
    <code class="literal">root-shell&gt;</code> is similar but should be executed
    as <code class="literal">root</code>, and <code class="literal">mysql&gt;</code>
    indicates a statement that you execute from the
    <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Tool"><span class="command"><strong>mysql</strong></span></a> client program:
  </p><pre class="programlisting">
shell&gt; <strong class="userinput"><code>type a shell command here</code></strong>
root-shell&gt; <strong class="userinput"><code>type a shell command as <em class="replaceable"><code>root</code></em> here</code></strong>
mysql&gt; <strong class="userinput"><code>type a mysql statement here</code></strong>
</pre><p>
    In some areas different systems may be distinguished from each other
    to show that commands should be executed in two different
    environments. For example, while working with replication the
    commands might be prefixed with <code class="literal">master</code> and
    <code class="literal">slave</code>:
  </p><pre class="programlisting">
master&gt; <strong class="userinput"><code>type a mysql command on the replication master here</code></strong>
slave&gt; <strong class="userinput"><code>type a mysql command on the replication slave here</code></strong>
</pre><p>
    The <span class="quote">“<span class="quote">shell</span>”</span> is your command interpreter. On Unix, this
    is typically a program such as <span class="command"><strong>sh</strong></span>,
    <span class="command"><strong>csh</strong></span>, or <span class="command"><strong>bash</strong></span>. On Windows, the
    equivalent program is <span class="command"><strong>command.com</strong></span> or
    <span class="command"><strong>cmd.exe</strong></span>, typically run in a console window.
  </p><p>
    When you enter a command or statement shown in an example, do not
    type the prompt shown in the example.
  </p><p>
    Database, table, and column names must often be substituted into
    statements. To indicate that such substitution is necessary, this
    manual uses <em class="replaceable"><code>db_name</code></em>,
    <em class="replaceable"><code>tbl_name</code></em>, and
    <em class="replaceable"><code>col_name</code></em>. For example, you might see a
    statement like this:
  </p><pre class="programlisting">
mysql&gt; <strong class="userinput"><code>SELECT <em class="replaceable"><code>col_name</code></em> FROM <em class="replaceable"><code>db_name</code></em>.<em class="replaceable"><code>tbl_name</code></em>;</code></strong>
</pre><p>
    This means that if you were to enter a similar statement, you would
    supply your own database, table, and column names, perhaps like
    this:
  </p><pre class="programlisting">
mysql&gt; <strong class="userinput"><code>SELECT author_name FROM biblio_db.author_list;</code></strong>
</pre><p>
    SQL keywords are not case-sensitive and may be written in any
    lettercase. This manual uses uppercase.
  </p><p>
    In syntax descriptions, square brackets
    (<span class="quote">“<span class="quote"><code class="literal">[</code></span>”</span> and
    <span class="quote">“<span class="quote"><code class="literal">]</code></span>”</span>) indicate optional words or
    clauses. For example, in the following statement, <code class="literal">IF
    EXISTS</code> is optional:
  </p><pre class="programlisting">
DROP TABLE [IF EXISTS] <em class="replaceable"><code>tbl_name</code></em>
</pre><p>
    When a syntax element consists of a number of alternatives, the
    alternatives are separated by vertical bars
    (<span class="quote">“<span class="quote"><code class="literal">|</code></span>”</span>). When one member from a set of
    choices <span class="emphasis"><em>may</em></span> be chosen, the alternatives are
    listed within square brackets (<span class="quote">“<span class="quote"><code class="literal">[</code></span>”</span>
    and <span class="quote">“<span class="quote"><code class="literal">]</code></span>”</span>):
  </p><pre class="programlisting">
TRIM([[BOTH | LEADING | TRAILING] [<em class="replaceable"><code>remstr</code></em>] FROM] <em class="replaceable"><code>str</code></em>)
</pre><p>
    When one member from a set of choices <span class="emphasis"><em>must</em></span> be
    chosen, the alternatives are listed within braces
    (<span class="quote">“<span class="quote"><code class="literal">{</code></span>”</span> and
    <span class="quote">“<span class="quote"><code class="literal">}</code></span>”</span>):
  </p><pre class="programlisting">
{DESCRIBE | DESC} <em class="replaceable"><code>tbl_name</code></em> [<em class="replaceable"><code>col_name</code></em> | <em class="replaceable"><code>wild</code></em>]
</pre><p>
    An ellipsis (<code class="literal">...</code>) indicates the omission of a
    section of a statement, typically to provide a shorter version of
    more complex syntax. For example,
    <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT ... INTO
    OUTFILE</code></a> is shorthand for the form of
    <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statement that has an
    <code class="literal">INTO OUTFILE</code> clause following other parts of the
    statement.
  </p><p>
    An ellipsis can also indicate that the preceding syntax element of a
    statement may be repeated. In the following example, multiple
    <em class="replaceable"><code>reset_option</code></em> values may be given, with
    each of those after the first preceded by commas:
  </p><pre class="programlisting">
RESET <em class="replaceable"><code>reset_option</code></em> [,<em class="replaceable"><code>reset_option</code></em>] ...
</pre><p>
    Commands for setting shell variables are shown using Bourne shell
    syntax. For example, the sequence to set the <code class="literal">CC</code>
    environment variable and run the <span class="command"><strong>configure</strong></span>
    command looks like this in Bourne shell syntax:
  </p><pre class="programlisting">
shell&gt; <strong class="userinput"><code>CC=gcc ./configure</code></strong>
</pre><a class="indexterm" name="idm139899662962608"></a><a class="indexterm" name="idm139899662961600"></a><p>
    If you are using <span class="command"><strong>csh</strong></span> or <span class="command"><strong>tcsh</strong></span>,
    you must issue commands somewhat differently:
  </p><pre class="programlisting">
shell&gt; <strong class="userinput"><code>setenv CC gcc</code></strong>
shell&gt; <strong class="userinput"><code>./configure</code></strong>
</pre>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="what-is"></a>1.3 Overview of the MySQL Database Management System</h2>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#what-is-mysql">1.3.1 What is MySQL?</a></span></dt><dt><span class="section"><a href="introduction.html#features">1.3.2 The Main Features of MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#history">1.3.3 History of MySQL</a></span></dt></dl>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="what-is-mysql"></a>1.3.1 What is MySQL?</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm139899662954960"></a><a class="indexterm" name="idm139899662953568"></a><p>
      MySQL, the most popular Open Source SQL database management
      system, is developed, distributed, and supported by Oracle
      Corporation.
    </p><p>
      The MySQL website (<a class="ulink" href="http://www.mysql.com/" target="_top">http://www.mysql.com/</a>) provides
      the latest information about MySQL software.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <span class="bold"><strong>MySQL is a database management
          system.</strong></span>
        </p><p>
          A database is a structured collection of data. It may be
          anything from a simple shopping list to a picture gallery or
          the vast amounts of information in a corporate network. To
          add, access, and process data stored in a computer database,
          you need a database management system such as MySQL Server.
          Since computers are very good at handling large amounts of
          data, database management systems play a central role in
          computing, as standalone utilities, or as parts of other
          applications.
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>MySQL databases are
          relational.</strong></span>
        </p><p>
          <a class="indexterm" name="idm139899662946496"></a>

          A relational database stores data in separate tables rather
          than putting all the data in one big storeroom. The database
          structures are organized into physical files optimized for
          speed. The logical model, with objects such as databases,
          tables, views, rows, and columns, offers a flexible
          programming environment. You set up rules governing the
          relationships between different data fields, such as
          one-to-one, one-to-many, unique, required or optional, and
          <span class="quote">“<span class="quote">pointers</span>”</span> between different tables. The database
          enforces these rules, so that with a well-designed database,
          your application never sees inconsistent, duplicate, orphan,
          out-of-date, or missing data.
        </p><p>
          The SQL part of <span class="quote">“<span class="quote">MySQL</span>”</span> stands for
          <span class="quote">“<span class="quote">Structured Query Language</span>”</span>. SQL is the most
          common standardized language used to access databases.
          Depending on your programming environment, you might enter SQL
          directly (for example, to generate reports), embed SQL
          statements into code written in another language, or use a
          language-specific API that hides the SQL syntax.
        </p><p>
          SQL is defined by the ANSI/ISO SQL Standard. The SQL standard
          has been evolving since 1986 and several versions exist. In
          this manual, <span class="quote">“<span class="quote">SQL-92</span>”</span> refers to the standard
          released in 1992, <span class="quote">“<span class="quote">SQL:1999</span>”</span> refers to the
          standard released in 1999, and <span class="quote">“<span class="quote">SQL:2003</span>”</span> refers
          to the current version of the standard. We use the phrase
          <span class="quote">“<span class="quote">the SQL standard</span>”</span> to mean the current version of
          the SQL Standard at any time.
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>MySQL software is Open
          Source.</strong></span>
        </p><p>
          <a class="indexterm" name="idm139899662938256"></a>

          <a class="indexterm" name="idm139899662936864"></a>

          <a class="indexterm" name="idm139899662935472"></a>

          <a class="indexterm" name="idm139899662934080"></a>

          Open Source means that it is possible for anyone to use and
          modify the software. Anybody can download the MySQL software
          from the Internet and use it without paying anything. If you
          wish, you may study the source code and change it to suit your
          needs. The MySQL software uses the GPL (GNU General Public
          License), <a class="ulink" href="http://www.fsf.org/licenses/" target="_top">http://www.fsf.org/licenses/</a>, to
          define what you may and may not do with the software in
          different situations. If you feel uncomfortable with the GPL
          or need to embed MySQL code into a commercial application, you
          can buy a commercially licensed version from us. See the MySQL
          Licensing Overview for more information
          (<a class="ulink" href="http://www.mysql.com/company/legal/licensing/" target="_top">http://www.mysql.com/company/legal/licensing/</a>).
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>The MySQL Database Server is very fast,
          reliable, scalable, and easy to use.</strong></span>
        </p><p>
          If that is what you are looking for, you should give it a try.
          MySQL Server can run comfortably on a desktop or laptop,
          alongside your other applications, web servers, and so on,
          requiring little or no attention. If you dedicate an entire
          machine to MySQL, you can adjust the settings to take
          advantage of all the memory, CPU power, and I/O capacity
          available. MySQL can also scale up to clusters of machines,
          networked together.
        </p><p>
          MySQL Server was originally developed to handle large
          databases much faster than existing solutions and has been
          successfully used in highly demanding production environments
          for several years. Although under constant development, MySQL
          Server today offers a rich and useful set of functions. Its
          connectivity, speed, and security make MySQL Server highly
          suited for accessing databases on the Internet.
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>MySQL Server works in client/server or
          embedded systems.</strong></span>
        </p><p>
          The MySQL Database Software is a client/server system that
          consists of a multi-threaded SQL server that supports
          different back ends, several different client programs and
          libraries, administrative tools, and a wide range of
          application programming interfaces (APIs).
        </p><p>
          We also provide MySQL Server as an embedded multi-threaded
          library that you can link into your application to get a
          smaller, faster, easier-to-manage standalone product.
        </p></li><li class="listitem"><p>
          <span class="bold"><strong>A large amount of contributed MySQL
          software is available.</strong></span>
        </p><p>
          MySQL Server has a practical set of features developed in
          close cooperation with our users. It is very likely that your
          favorite application or language supports the MySQL Database
          Server.
</p></li></ul>
</div>
<a class="indexterm" name="idm139899662922736"></a><a class="indexterm" name="idm139899662921344"></a><p>
      The official way to pronounce <span class="quote">“<span class="quote">MySQL</span>”</span> is <span class="quote">“<span class="quote">My
      Ess Que Ell</span>”</span> (not <span class="quote">“<span class="quote">my sequel</span>”</span>), but we do not
      mind if you pronounce it as <span class="quote">“<span class="quote">my sequel</span>”</span> or in some
      other localized way.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="features"></a>1.3.2 The Main Features of MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm139899662917024"></a><a class="indexterm" name="idm139899662916016"></a><p>
      This section describes some of the important characteristics of
      the MySQL Database Software. In most respects, the roadmap applies
      to all versions of MySQL. For information about features as they
      are introduced into MySQL on a series-specific basis, see the
      <span class="quote">“<span class="quote">In a Nutshell</span>”</span> section of the appropriate Manual:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          MySQL 8.0: <a class="xref" href="introduction.html#mysql-nutshell" title="1.4 What Is New in MySQL 8.0">Section 1.4, “What Is New in MySQL 8.0”</a>
        </p></li><li class="listitem"><p>
          MySQL 5.7: <a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html" target="_top">What Is New in MySQL 5.7</a>
        </p></li><li class="listitem"><p>
          MySQL 5.6: <a class="ulink" href="http://dev.mysql.com/doc/refman/5.6/en/mysql-nutshell.html" target="_top">What Is New in MySQL 5.6</a>
        </p></li><li class="listitem"><p>
          MySQL 5.5: <a class="ulink" href="http://dev.mysql.com/doc/refman/5.5/en/mysql-nutshell.html" target="_top">What Is New in MySQL 5.5</a>
</p></li></ul>
</div>
<h4><a name="idm139899662906896"></a>Internals and Portability</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Written in C and C++.
        </p></li><li class="listitem"><p>
          Tested with a broad range of different compilers.
        </p></li><li class="listitem"><p>
          Works on many different platforms. See
          <a class="ulink" href="http://www.mysql.com/support/supportedplatforms/database.html" target="_top">http://www.mysql.com/support/supportedplatforms/database.html</a>.
        </p></li><li class="listitem"><p>
          For portability, uses <span class="command"><strong>CMake</strong></span> in MySQL 5.5
          and up. Previous series use GNU Automake, Autoconf, and
          Libtool.
        </p></li><li class="listitem"><p>
          Tested with Purify (a commercial memory leakage detector) as
          well as with Valgrind, a GPL tool
          (<a class="ulink" href="http://developer.kde.org/~sewardj/" target="_top">http://developer.kde.org/~sewardj/</a>).
        </p></li><li class="listitem"><p>
          Uses multi-layered server design with independent modules.
        </p></li><li class="listitem"><p>
          Designed to be fully multi-threaded using kernel threads, to
          easily use multiple CPUs if they are available.
        </p></li><li class="listitem"><p>
          Provides transactional and nontransactional storage engines.
        </p></li><li class="listitem"><p>
          Uses very fast B-tree disk tables (<code class="literal">MyISAM</code>)
          with index compression.
        </p></li><li class="listitem"><p>
          Designed to make it relatively easy to add other storage
          engines. This is useful if you want to provide an SQL
          interface for an in-house database.
        </p></li><li class="listitem"><p>
          Uses a very fast thread-based memory allocation system.
        </p></li><li class="listitem"><p>
          Executes very fast joins using an optimized nested-loop join.
        </p></li><li class="listitem"><p>
          Implements in-memory hash tables, which are used as temporary
          tables.
        </p></li><li class="listitem"><p>
          Implements SQL functions using a highly optimized class
          library that should be as fast as possible. Usually there is
          no memory allocation at all after query initialization.
        </p></li><li class="listitem"><p>
          Provides the server as a separate program for use in a
          client/server networked environment, and as a library that can
          be embedded (linked) into standalone applications. Such
          applications can be used in isolation or in environments where
          no network is available.
</p></li></ul>
</div>
<h4><a name="idm139899662890192"></a>Data Types</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Many data types: signed/unsigned integers 1, 2, 3, 4, and 8
          bytes long, <a class="link" href="data-types.html#floating-point-types" title="11.2.3 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE"><code class="literal">FLOAT</code></a>,
          <a class="link" href="data-types.html#floating-point-types" title="11.2.3 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE"><code class="literal">DOUBLE</code></a>,
          <a class="link" href="data-types.html#char" title="11.4.1 The CHAR and VARCHAR Types"><code class="literal">CHAR</code></a>,
          <a class="link" href="data-types.html#char" title="11.4.1 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a>,
          <a class="link" href="data-types.html#binary-varbinary" title="11.4.2 The BINARY and VARBINARY Types"><code class="literal">BINARY</code></a>,
          <a class="link" href="data-types.html#binary-varbinary" title="11.4.2 The BINARY and VARBINARY Types"><code class="literal">VARBINARY</code></a>,
          <a class="link" href="data-types.html#blob" title="11.4.3 The BLOB and TEXT Types"><code class="literal">TEXT</code></a>,
          <a class="link" href="data-types.html#blob" title="11.4.3 The BLOB and TEXT Types"><code class="literal">BLOB</code></a>,
          <a class="link" href="data-types.html#datetime" title="11.3.1 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">DATE</code></a>,
          <a class="link" href="data-types.html#time" title="11.3.2 The TIME Type"><code class="literal">TIME</code></a>,
          <a class="link" href="data-types.html#datetime" title="11.3.1 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">DATETIME</code></a>,
          <a class="link" href="data-types.html#datetime" title="11.3.1 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">TIMESTAMP</code></a>,
          <a class="link" href="data-types.html#year" title="11.3.3 The YEAR Type"><code class="literal">YEAR</code></a>,
          <a class="link" href="data-types.html#set" title="11.4.5 The SET Type"><code class="literal">SET</code></a>,
          <a class="link" href="data-types.html#enum" title="11.4.4 The ENUM Type"><code class="literal">ENUM</code></a>, and OpenGIS spatial
          types. See <a class="xref" href="data-types.html" title="Chapter 11 Data Types">Chapter 11, <i>Data Types</i></a>.
        </p></li><li class="listitem"><p>
          Fixed-length and variable-length string types.
</p></li></ul>
</div>
<h4><a name="idm139899662872080"></a>Statements and Functions</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Full operator and function support in the
          <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> list and
          <code class="literal">WHERE</code> clause of queries. For example:
        </p><pre class="programlisting">
mysql&gt; <strong class="userinput"><code>SELECT CONCAT(first_name, ' ', last_name)</code></strong>
    -&gt; <strong class="userinput"><code>FROM citizen</code></strong>
    -&gt; <strong class="userinput"><code>WHERE income/dependents &gt; 10000 AND age &gt; 30;</code></strong>
</pre></li><li class="listitem"><p>
          Full support for SQL <code class="literal">GROUP BY</code> and
          <code class="literal">ORDER BY</code> clauses. Support for group
          functions (<a class="link" href="functions.html#function_count"><code class="literal">COUNT()</code></a>,
          <a class="link" href="functions.html#function_avg"><code class="literal">AVG()</code></a>,
          <a class="link" href="functions.html#function_std"><code class="literal">STD()</code></a>,
          <a class="link" href="functions.html#function_sum"><code class="literal">SUM()</code></a>,
          <a class="link" href="functions.html#function_max"><code class="literal">MAX()</code></a>,
          <a class="link" href="functions.html#function_min"><code class="literal">MIN()</code></a>, and
          <a class="link" href="functions.html#function_group-concat"><code class="literal">GROUP_CONCAT()</code></a>).
        </p></li><li class="listitem"><p>
          Support for <code class="literal">LEFT OUTER JOIN</code> and
          <code class="literal">RIGHT OUTER JOIN</code> with both standard SQL and
          ODBC syntax.
        </p></li><li class="listitem"><p>
          Support for aliases on tables and columns as required by
          standard SQL.
        </p></li><li class="listitem"><p>
          Support for <a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE Syntax"><code class="literal">DELETE</code></a>,
          <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a>,
          <a class="link" href="sql-syntax.html#replace" title="13.2.9 REPLACE Syntax"><code class="literal">REPLACE</code></a>, and
          <a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE Syntax"><code class="literal">UPDATE</code></a> to return the number of
          rows that were changed (affected), or to return the number of
          rows matched instead by setting a flag when connecting to the
          server.
        </p></li><li class="listitem"><p>
          Support for MySQL-specific <a class="link" href="sql-syntax.html#show" title="13.7.6 SHOW Syntax"><code class="literal">SHOW</code></a>
          statements that retrieve information about databases, storage
          engines, tables, and indexes. Support for the
          <code class="literal">INFORMATION_SCHEMA</code> database, implemented
          according to standard SQL.
        </p></li><li class="listitem"><p>
          An <a class="link" href="sql-syntax.html#explain" title="13.8.2 EXPLAIN Syntax"><code class="literal">EXPLAIN</code></a> statement to show
          how the optimizer resolves a query.
        </p></li><li class="listitem"><p>
          Independence of function names from table or column names. For
          example, <code class="literal">ABS</code> is a valid column name. The
          only restriction is that for a function call, no spaces are
          permitted between the function name and the
          <span class="quote">“<span class="quote"><code class="literal">(</code></span>”</span> that follows it. See
          <a class="xref" href="language-structure.html#keywords" title="9.3 Keywords and Reserved Words">Section 9.3, “Keywords and Reserved Words”</a>.
        </p></li><li class="listitem"><p>
          You can refer to tables from different databases in the same
          statement.
</p></li></ul>
</div>
<h4><a name="idm139899662840944"></a>Security</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          A privilege and password system that is very flexible and
          secure, and that enables host-based verification.
        </p></li><li class="listitem"><p>
          Password security by encryption of all password traffic when
          you connect to a server.
</p></li></ul>
</div>
<h4><a name="idm139899662838112"></a>Scalability and Limits</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Support for large databases. We use MySQL Server with
          databases that contain 50 million records. We also know of
          users who use MySQL Server with 200,000 tables and about
          5,000,000,000 rows.
        </p></li><li class="listitem"><p>
          Support for up to 64 indexes per table. Each index may consist
          of 1 to 16 columns or parts of columns. The maximum index
          width for <a class="link" href="innodb-storage-engine.html" title="Chapter 15 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> tables is either
          767 bytes or 3072 bytes. See
          <a class="xref" href="innodb-storage-engine.html#innodb-restrictions" title="15.8.1.7 Limits on InnoDB Tables">Section 15.8.1.7, “Limits on InnoDB Tables”</a>. The maximum index width
          for <a class="link" href="storage-engines.html#myisam-storage-engine" title="16.2 The MyISAM Storage Engine"><code class="literal">MyISAM</code></a> tables is 1000 bytes.
          See <a class="xref" href="storage-engines.html#myisam-storage-engine" title="16.2 The MyISAM Storage Engine">Section 16.2, “The MyISAM Storage Engine”</a>. An index may use
          a prefix of a column for <a class="link" href="data-types.html#char" title="11.4.1 The CHAR and VARCHAR Types"><code class="literal">CHAR</code></a>,
          <a class="link" href="data-types.html#char" title="11.4.1 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a>,
          <a class="link" href="data-types.html#blob" title="11.4.3 The BLOB and TEXT Types"><code class="literal">BLOB</code></a>, or
          <a class="link" href="data-types.html#blob" title="11.4.3 The BLOB and TEXT Types"><code class="literal">TEXT</code></a> column types.
</p></li></ul>
</div>
<h4><a name="idm139899662828112"></a>Connectivity</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Clients can connect to MySQL Server using several protocols:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
              Clients can connect using TCP/IP sockets on any platform.
            </p></li><li class="listitem"><p>
              On Windows systems, clients can connect using named pipes
              if the server is started with the
              <a class="link" href="server-administration.html#option_mysqld_enable-named-pipe"><code class="option">--enable-named-pipe</code></a> option.
              Windows servers also support shared-memory connections if
              started with the
              <a class="link" href="server-administration.html#option_mysqld_shared-memory"><code class="option">--shared-memory</code></a> option.
              Clients can connect through shared memory by using the
              <code class="option">--protocol=memory</code> option.
            </p></li><li class="listitem"><p>
              On Unix systems, clients can connect using Unix domain
              socket files.
</p></li></ul>
</div>
</li><li class="listitem"><p>
          MySQL client programs can be written in many languages. A
          client library written in C is available for clients written
          in C or C++, or for any language that provides C bindings.
        </p></li><li class="listitem"><p>
          APIs for C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, and
          Tcl are available, enabling MySQL clients to be written in
          many languages. See <a class="xref" href="connectors-apis.html" title="Chapter 27 Connectors and APIs">Chapter 27, <i>Connectors and APIs</i></a>.
        </p></li><li class="listitem"><p>
          The Connector/ODBC (MyODBC) interface provides MySQL support
          for client programs that use ODBC (Open Database Connectivity)
          connections. For example, you can use MS Access to connect to
          your MySQL server. Clients can be run on Windows or Unix.
          Connector/ODBC source is available. All ODBC 2.5 functions are
          supported, as are many others. See
          <a class="ulink" href="http://dev.mysql.com/doc/connector-odbc/en/" target="_top">MySQL Connector/ODBC Developer Guide</a>.
        </p></li><li class="listitem"><p>
          The Connector/J interface provides MySQL support for Java
          client programs that use JDBC connections. Clients can be run
          on Windows or Unix. Connector/J source is available. See
          <a class="ulink" href="http://dev.mysql.com/doc/connector-j/5.1/en/" target="_top">MySQL Connector/J 5.1 Developer Guide</a>.
        </p></li><li class="listitem"><p>
          MySQL Connector/Net enables developers to easily create .NET
          applications that require secure, high-performance data
          connectivity with MySQL. It implements the required ADO.NET
          interfaces and integrates into ADO.NET aware tools. Developers
          can build applications using their choice of .NET languages.
          MySQL Connector/Net is a fully managed ADO.NET driver written
          in 100% pure C#. See <a class="ulink" href="http://dev.mysql.com/doc/connector-net/en/" target="_top">MySQL Connector/Net Developer Guide</a>.
</p></li></ul>
</div>
<h4><a name="idm139899662812928"></a>Localization</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          The server can provide error messages to clients in many
          languages. See <a class="xref" href="charset.html#error-message-language" title="10.11 Setting the Error Message Language">Section 10.11, “Setting the Error Message Language”</a>.
        </p></li><li class="listitem"><p>
          Full support for several different character sets, including
          <code class="literal">latin1</code> (cp1252), <code class="literal">german</code>,
          <code class="literal">big5</code>, <code class="literal">ujis</code>, several
          Unicode character sets, and more. For example, the
          Scandinavian characters <span class="quote">“<span class="quote"><code class="literal">å</code></span>”</span>,
          <span class="quote">“<span class="quote"><code class="literal">ä</code></span>”</span> and
          <span class="quote">“<span class="quote"><code class="literal">ö</code></span>”</span> are permitted in table
          and column names.
        </p></li><li class="listitem"><p>
          All data is saved in the chosen character set.
        </p></li><li class="listitem"><p>
          Sorting and comparisons are done according to the default
          character set and collation. is possible to change this when
          the MySQL server is started (see
          <a class="xref" href="charset.html#charset-server" title="10.3.2 Server Character Set and Collation">Section 10.3.2, “Server Character Set and Collation”</a>). To see an example of very
          advanced sorting, look at the Czech sorting code. MySQL Server
          supports many different character sets that can be specified
          at compile time and runtime.
        </p></li><li class="listitem"><p>
          The server time zone can be changed dynamically, and
          individual clients can specify their own time zone. See
          <a class="xref" href="server-administration.html#time-zone-support" title="5.1.10 MySQL Server Time Zone Support">Section 5.1.10, “MySQL Server Time Zone Support”</a>.
</p></li></ul>
</div>
<h4><a name="idm139899662800832"></a>Clients and Tools</h4>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          MySQL includes several client and utility programs. These
          include both command-line programs such as
          <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a> and
          <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin</strong></span></a>, and graphical programs such as
          <a class="link" href="workbench.html" title="Chapter 30 MySQL Workbench">MySQL Workbench</a>.
        </p></li><li class="listitem"><p>
          MySQL Server has built-in support for SQL statements to check,
          optimize, and repair tables. These statements are available
          from the command line through the
          <a class="link" href="programs.html#mysqlcheck" title="4.5.3 mysqlcheck — A Table Maintenance Program"><span class="command"><strong>mysqlcheck</strong></span></a> client. MySQL also includes
          <a class="link" href="programs.html#myisamchk" title="4.6.4 myisamchk — MyISAM Table-Maintenance Utility"><span class="command"><strong>myisamchk</strong></span></a>, a very fast command-line utility
          for performing these operations on <code class="literal">MyISAM</code>
          tables. See <a class="xref" href="programs.html" title="Chapter 4 MySQL Programs">Chapter 4, <i>MySQL Programs</i></a>.
        </p></li><li class="listitem"><p>
          MySQL programs can be invoked with the <code class="option">--help</code>
          or <code class="option">-?</code> option to obtain online assistance.
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="history"></a>1.3.3 History of MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm139899662789584"></a><a class="indexterm" name="idm139899662788576"></a><a class="indexterm" name="idm139899662787568"></a><a class="indexterm" name="idm139899662786560"></a><a class="indexterm" name="idm139899662785168"></a><a class="indexterm" name="idm139899662784160"></a><p>
      We started out with the intention of using the
      <code class="literal">mSQL</code> database system to connect to our tables
      using our own fast low-level (ISAM) routines. However, after some
      testing, we came to the conclusion that <code class="literal">mSQL</code>
      was not fast enough or flexible enough for our needs. This
      resulted in a new SQL interface to our database but with almost
      the same API interface as <code class="literal">mSQL</code>. This API was
      designed to enable third-party code that was written for use with
      <code class="literal">mSQL</code> to be ported easily for use with MySQL.
    </p><p>
      MySQL is named after co-founder Monty Widenius's daughter, My.
    </p><p>
      The name of the MySQL Dolphin (our logo) is <span class="quote">“<span class="quote">Sakila,</span>”</span>
      which was chosen from a huge list of names suggested by users in
      our <span class="quote">“<span class="quote">Name the Dolphin</span>”</span> contest. The winning name was
      submitted by Ambrose Twebaze, an Open Source software developer
      from Swaziland, Africa. According to Ambrose, the feminine name
      Sakila has its roots in SiSwati, the local language of Swaziland.
      Sakila is also the name of a town in Arusha, Tanzania, near
      Ambrose's country of origin, Uganda.
</p>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="mysql-nutshell"></a>1.4 What Is New in MySQL 8.0</h2>

</div>

</div>

</div>
<a class="indexterm" name="idm139899662776480"></a><a class="indexterm" name="idm139899662775472"></a><a class="indexterm" name="idm139899662774464"></a><p>
      This section summarizes what has been added to, deprecated in, and
      removed from MySQL 8.0. A companion section lists
      MySQL server options and variables that have been added,
      deprecated, or removed in MySQL 8.0. See
      <a class="xref" href="introduction.html#added-deprecated-removed" title="1.5 Server and Status Variables and Options Added, Deprecated, or Removed in MySQL 8.0">Section 1.5, “Server and Status Variables and Options Added, Deprecated, or Removed in
    MySQL 8.0”</a>.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <a class="xref" href="introduction.html#mysql-nutshell-additions" title="Features Added in MySQL 8.0">Features Added in MySQL 8.0</a>
        </p></li><li class="listitem"><p>
          <a class="xref" href="introduction.html#mysql-nutshell-deprecations" title="Features Deprecated in MySQL 8.0">Features Deprecated in MySQL 8.0</a>
        </p></li><li class="listitem"><p>
          <a class="xref" href="introduction.html#mysql-nutshell-removals" title="Features Removed in MySQL 8.0">Features Removed in MySQL 8.0</a>
</p></li></ul>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="mysql-nutshell-additions"></a>Features Added in MySQL 8.0</h3>

</div>

</div>

</div>
<p>
        The following features have been added to MySQL
        8.0:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><b>Data dictionary. </b>
              MySQL now incorporates a transactional data dictionary
              that stores information about database objects. In
              previous MySQL releases, dictionary data was stored in
              metadata files and nontransactional tables. For more
              information, see <a class="xref" href="data-dictionary.html" title="Chapter 14 MySQL Data Dictionary">Chapter 14, <i>MySQL Data Dictionary</i></a>.
            </p></li><li class="listitem"><p><b>Atomic Data Definition Statements (Atomic DDL). </b>
              An atomic DDL statement combines the data dictionary
              updates, storage engine operations, and binary log writes
              associated with a DDL operation into a single, atomic
              transaction. For more information, see
              <a class="xref" href="sql-syntax.html#atomic-ddl" title="13.1.1 Atomic Data Definition Statement Support">Section 13.1.1, “Atomic Data Definition Statement Support”</a>.
            </p></li><li class="listitem"><p><b>Security and account management. </b>
              These enhancements were added to improve security and
              enable greater DBA flexibility in account management:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                A new <code class="literal">caching_sha2_password</code>
                authentication plugin is available. Like the
                <code class="literal">sha256_password</code> plugin,
                <code class="literal">caching_sha2_password</code> implements
                SHA-256 password hashing, but uses caching to address
                latency issues at connect time. It also supports more
                connection protocols and does not require linking
                against OpenSSL for RSA key pair-based password-exchange
                capabilities. See
                <a class="xref" href="security.html#caching-sha2-pluggable-authentication" title="6.5.1.3 Caching SHA-2 Pluggable Authentication">Section 6.5.1.3, “Caching SHA-2 Pluggable Authentication”</a>.
              </p><p>
                The <code class="literal">caching_sha2_password</code> and
                <code class="literal">sha256_password</code> authentication
                plugins provide more secure password encryption than the
                <code class="literal">mysql_native_password</code> plugin, and
                <code class="literal">caching_sha2_password</code> provides better
                performance than <code class="literal">sha256_password</code>. Due
                to these superior security and performance
                characteristics of
                <code class="literal">caching_sha2_password</code>, it is now the
                preferred authentication plugin, and is also the default
                authentication plugin rather than
                <code class="literal">mysql_native_password</code>. For
                information about the implications of this change for
                server operation and compatibility of the server with
                clients and connectors, see
                <a class="xref" href="installing.html#upgrade-caching-sha2-password" title="caching_sha2_password as the Preferred Authentication Plugin">caching_sha2_password as the Preferred Authentication Plugin</a>.
              </p></li><li class="listitem"><p>
                MySQL now supports roles, which are named collections of
                privileges. Roles can be created and dropped. Roles can
                have privileges granted to and revoked from them. Roles
                can be granted to and revoked from user accounts. The
                active applicable roles for an account can be selected
                from among those granted to the account, and can be
                changed during sessions for that account. For more
                information, see <a class="xref" href="security.html#roles" title="6.3.4 Using Roles">Section 6.3.4, “Using Roles”</a>.
              </p></li><li class="listitem"><p>
                MySQL now maintains information about password history,
                enabling restrictions on reuse of previous passwords.
                DBAs can require that new passwords not be selected from
                previous passwords for some number of password changes
                or period of time. It is possible to establish
                password-reuse policy globally as well as on a
                per-account basis. Together with existing
                password-expiration capabilities to require that
                passwords be changed periodically, the new
                password-history capabilities provide DBAs more complete
                control over password management. For more information,
                see <a class="xref" href="security.html#password-management" title="6.3.8 Password Management">Section 6.3.8, “Password Management”</a>.
              </p></li><li class="listitem"><p>
                MySQL now supports FIPS mode, if compiled using OpenSSL,
                and an OpenSSL library and FIPS Object Module are
                available at runtime. FIPS mode imposes conditions on
                cryptographic operations such as restrictions on
                acceptable encryption algorithms or requirements for
                longer key lengths. See <a class="xref" href="security.html#fips-mode" title="6.6 FIPS Support">Section 6.6, “FIPS Support”</a>.
</p></li></ul>
</div>
</li><li class="listitem"><p><b>Resource management. </b>
              MySQL now supports creation and management of resource
              groups, and permits assigning threads running within the
              server to particular groups so that threads execute
              according to the resources available to the group. Group
              attributes enable control over its resources, to enable or
              restrict resource consumption by threads in the group.
              DBAs can modify these attributes as appropriate for
              different workloads. Currently, CPU time is a manageable
              resource, represented by the concept of <span class="quote">“<span class="quote">virtual
              CPU</span>”</span> as a term that includes CPU cores,
              hyperthreads, hardware threads, and so forth. The server
              determines at startup how many virtual CPUs are available,
              and database administrators with appropriate privileges
              can associate these CPUs with resource groups and assign
              threads to groups. For more information, see
              <a class="xref" href="optimization.html#resource-groups" title="8.12.5 Resource Groups">Section 8.12.5, “Resource Groups”</a>.
            </p></li><li class="listitem"><p><b>InnoDB enhancements. </b>
              These <code class="literal">InnoDB</code> enhancements were added:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The current maximum auto-increment counter value is
                written to the redo log each time the value changes, and
                saved to an engine-private system table on each
                checkpoint. These changes make the current maximum
                auto-increment counter value persistent across server
                restarts. Additionally:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    A server restart no longer cancels the effect of the
                    <code class="literal">AUTO_INCREMENT = N</code> table option.
                    If you initialize the auto-increment counter to a
                    specific value, or if you alter the auto-increment
                    counter value to a larger value, the new value is
                    persisted across server restarts.
                  </p></li><li class="listitem"><p>
                    A server restart immediately following a
                    <a class="link" href="sql-syntax.html#commit" title="13.3.1 START TRANSACTION, COMMIT, and ROLLBACK Syntax"><code class="literal">ROLLBACK</code></a>
                    operation no longer results in the reuse of
                    auto-increment values that were allocated to the
                    rolled-back transaction.
                  </p></li><li class="listitem"><p>
                    If you modify an <code class="literal">AUTO_INCREMENT</code>
                    column value to a value larger than the current
                    maximum auto-increment value (in an
                    <a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE Syntax"><code class="literal">UPDATE</code></a> operation, for
                    example), the new value is persisted, and subsequent
                    <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a> operations
                    allocate auto-increment values starting from the
                    new, larger value.
</p></li></ul>
</div>
<p>
                For more information, see
                <a class="xref" href="innodb-storage-engine.html#innodb-auto-increment-handling" title="15.8.1.5 AUTO_INCREMENT Handling in InnoDB">Section 15.8.1.5, “AUTO_INCREMENT Handling in InnoDB”</a>, and
                <a class="xref" href="innodb-storage-engine.html#innodb-auto-increment-initialization" title="InnoDB AUTO_INCREMENT Counter Initialization">InnoDB AUTO_INCREMENT Counter Initialization</a>.
              </p></li><li class="listitem"><p>
                When encountering index tree corruption,
                <code class="literal">InnoDB</code> writes a corruption flag to
                the redo log, which makes the corruption flag crash
                safe. <code class="literal">InnoDB</code> also writes in-memory
                corruption flag data to an engine-private system table
                on each checkpoint. During recovery,
                <code class="literal">InnoDB</code> reads corruption flags from
                both locations and merges results before marking
                in-memory table and index objects as corrupt.
              </p></li><li class="listitem"><p>
                The <code class="literal">InnoDB</code>
                <span class="command"><strong>memcached</strong></span> plugin supports multiple
                <code class="literal">get</code> operations (fetching multiple
                key/value pairs in a single <span class="command"><strong>memcached</strong></span>
                query) and range queries. See
                <a class="xref" href="innodb-storage-engine.html#innodb-memcached-multiple-get-range-query" title="15.19.4 InnoDB memcached Multiple get and Range Query Support">Section 15.19.4, “InnoDB memcached Multiple get and Range Query Support”</a>.
              </p></li><li class="listitem"><p>
                A new dynamic configuration option,
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_deadlock_detect"><code class="literal">innodb_deadlock_detect</code></a>,
                may be used to disable deadlock detection. On high
                concurrency systems, deadlock detection can cause a
                slowdown when numerous threads wait for the same lock.
                At times, it may be more efficient to disable deadlock
                detection and rely on the
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_lock_wait_timeout"><code class="literal">innodb_lock_wait_timeout</code></a>
                setting for transaction rollback when a deadlock occurs.
              </p></li><li class="listitem"><p>
                The new
                <a class="link" href="information-schema.html#innodb-cached-indexes-table" title="24.33.4 The INFORMATION_SCHEMA INNODB_CACHED_INDEXES Table"><code class="literal">INFORMATION_SCHEMA.INNODB_CACHED_INDEXES</code></a>
                table reports the number of index pages cached in the
                <code class="literal">InnoDB</code> buffer pool for each index.
              </p></li><li class="listitem"><p>
                All <code class="literal">InnoDB</code> temporary tables are now
                created in the shared temporary tablespace,
                <code class="filename">ibtmp1</code>.
              </p></li><li class="listitem"><p>
                The <code class="literal">InnoDB</code>
                <a class="link" href="innodb-storage-engine.html#innodb-tablespace-encryption" title="15.7.11 InnoDB Tablespace Encryption">tablespace
                encryption feature</a> supports encryption of redo
                log and undo log data. See
                <a class="xref" href="innodb-storage-engine.html#innodb-tablespace-encryption-redo-log" title="Redo Log Data Encryption">Redo Log Data Encryption</a>,
                and
                <a class="xref" href="innodb-storage-engine.html#innodb-tablespace-encryption-undo-log" title="Undo Log Data Encryption">Undo Log Data Encryption</a>.
              </p></li><li class="listitem"><p>
                <code class="literal">InnoDB</code> supports
                <code class="literal">NOWAIT</code> and <code class="literal">SKIP
                LOCKED</code> options with <code class="literal">SELECT ... FOR
                SHARE</code> and <code class="literal">SELECT ... FOR
                UPDATE</code> locking read statements.
                <code class="literal">NOWAIT</code> causes the statement to return
                immediately if a requested row is locked by another
                transaction. <code class="literal">SKIP LOCKED</code> removes
                locked rows from the result set. See
                <a class="xref" href="innodb-storage-engine.html#innodb-locking-reads-nowait-skip-locked" title="Locking Read Concurrency with NOWAIT and SKIP LOCKED">Locking Read Concurrency with NOWAIT and SKIP LOCKED</a>.
              </p><p>
                <code class="literal">SELECT ... FOR SHARE</code> replaces
                <code class="literal">SELECT ... LOCK IN SHARE MODE</code>, but
                <code class="literal">LOCK IN SHARE MODE</code> remains available
                for backward compatibility. The statements are
                equivalent. However, <code class="literal">FOR UPDATE</code> and
                <code class="literal">FOR SHARE</code> support
                <code class="literal">NOWAIT</code>, <code class="literal">SKIP
                LOCKED</code>, and <code class="literal">OF
                <em class="replaceable"><code>tbl_name</code></em></code> options.
                See <a class="xref" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax">Section 13.2.10, “SELECT Syntax”</a>.
              </p><p>
                <code class="literal">OF
                <em class="replaceable"><code>tbl_name</code></em></code> applies
                locking queries to named tables.
              </p></li><li class="listitem"><p>
                <code class="literal">ADD PARTITION</code>, <code class="literal">DROP
                PARTITION</code>, <code class="literal">COALESCE
                PARTITION</code>, <code class="literal">REORGANIZE
                PARTITION</code>, and <code class="literal">REBUILD
                PARTITION</code> <a class="link" href="sql-syntax.html#alter-table" title="13.1.8 ALTER TABLE Syntax"><code class="literal">ALTER
                TABLE</code></a> options are supported by native
                partitioning in-place APIs and may be used with
                <code class="literal">ALGORITHM={COPY|INPLACE}</code> and
                <code class="literal">LOCK</code> clauses.
              </p><p>
                <code class="literal">DROP PARTITION</code> with
                <code class="literal">ALGORITHM=INPLACE</code> deletes data stored
                in the partition and drops the partition. However,
                <code class="literal">DROP PARTITION</code> with
                <code class="literal">ALGORITHM=COPY</code> or
                <a class="link" href="server-administration.html#sysvar_old_alter_table"><code class="literal">old_alter_table=ON</code></a>
                rebuilds the partitioned table and attempts to move data
                from the dropped partition to another partition with a
                compatible <code class="literal">PARTITION ... VALUES</code>
                definition. Data that cannot be moved to another
                partition is deleted.
              </p></li><li class="listitem"><p>
                The <code class="literal">InnoDB</code> storage engine now uses
                the MySQL data dictionary rather than its own storage
                engine-specific data dictionary. For information about
                the data dictionary, see
                <a class="xref" href="data-dictionary.html" title="Chapter 14 MySQL Data Dictionary">Chapter 14, <i>MySQL Data Dictionary</i></a>.
              </p></li><li class="listitem"><p>
                <code class="literal">mysql</code> system tables and data
                dictionary tables are now created in a single
                <code class="literal">InnoDB</code> tablespace file named
                <code class="filename">mysql.ibd</code> in the MySQL data
                directory. Previously, these tables were created in
                individual <code class="literal">InnoDB</code> tablespace files in
                the <code class="literal">mysql</code> database directory.
              </p></li><li class="listitem"><p>
                The following undo tablespace changes are introduced in
                MySQL 8.0:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    The number of undo tablespaces can now be modified
                    at runtime, or when the server is restarted, using
                    the
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_tablespaces"><code class="literal">innodb_undo_tablespaces</code></a>
                    configuration option. This change permits the
                    addition of undo tablespaces and rollback segments
                    as the database grows.
                  </p></li><li class="listitem"><p>
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_log_truncate"><code class="literal">innodb_undo_log_truncate</code></a>
                    is enabled by default. See
                    <a class="xref" href="innodb-storage-engine.html#truncate-undo-tablespace" title="15.7.9 Truncating Undo Tablespaces">Section 15.7.9, “Truncating Undo Tablespaces”</a>.
                  </p></li><li class="listitem"><p>
                    The
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_tablespaces"><code class="literal">innodb_undo_tablespaces</code></a>
                    default value was changed from 0 to 2, which means
                    that rollback segments are created in two separate
                    undo tablespaces instead of the
                    <code class="literal">InnoDB</code> system tablespace by
                    default. A minimum of two undo tablespaces is
                    required to permit truncation of undo logs.
                  </p><p>
                    The minimum
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_tablespaces"><code class="literal">innodb_undo_tablespaces</code></a>
                    value is 2, and setting
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_tablespaces"><code class="literal">innodb_undo_tablespaces</code></a>
                    to 0 is no longer permitted. A minimum value of 2
                    ensures that rollback segments are always created in
                    undo tablespaces instead of the system tablespace.
                    For more information, see
                    <a class="xref" href="innodb-storage-engine.html#innodb-undo-tablespace" title="15.7.8 Configuring Undo Tablespaces">Section 15.7.8, “Configuring Undo Tablespaces”</a>.
                  </p></li><li class="listitem"><p>
                    The naming convention used for undo tablespace files
                    is changed from
                    <code class="filename">undo<em class="replaceable"><code>NNN</code></em></code>
                    to
                    <code class="filename">undo_<em class="replaceable"><code>NNN</code></em></code>,
                    where
                    <code class="literal"><em class="replaceable"><code>NNN</code></em></code> is
                    the undo space number.
                  </p></li><li class="listitem"><p>
                    The
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_rollback_segments"><code class="literal">innodb_rollback_segments</code></a>
                    configuration option defines the number of rollback
                    segments per undo tablespace. Previously,
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_rollback_segments"><code class="literal">innodb_rollback_segments</code></a>
                    was a global setting that specified the total number
                    of rollback segments for the MySQL instance. This
                    change increases the number of rollback segments
                    available for concurrent transactions. More rollback
                    segments increases the likelihood that concurrent
                    transactions use separate rollback segments for undo
                    logs, resulting in less resource contention.
                  </p></li><li class="listitem"><p>
                    The <code class="literal">innodb_undo_logs</code>
                    configuration option is removed. The
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_rollback_segments"><code class="literal">innodb_rollback_segments</code></a>
                    configuration option performs the same function and
                    should be used instead.
                  </p></li><li class="listitem"><p>
                    The <code class="literal">Innodb_available_undo_logs</code>
                    status variable is removed. The number of available
                    rollback segments per tablespace may be retrieved
                    using <code class="literal">SHOW VARIABLES LIKE
                    'innodb_rollback_segments';</code>
</p></li></ul>
</div>
</li><li class="listitem"><p>
                Default values for configuration options that affect
                buffer pool preflushing and flushing behavior were
                modified:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    The
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_max_dirty_pages_pct_lwm"><code class="literal">innodb_max_dirty_pages_pct_lwm</code></a>
                    default value is now 10. The previous default value
                    of 0 disables buffer pool preflushing. A value of 10
                    enables preflushing when the percentage of dirty
                    pages in the buffer pool exceeds 10%. Enabling
                    preflushing improves performance consistency.
                  </p></li><li class="listitem"><p>
                    The
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_max_dirty_pages_pct"><code class="literal">innodb_max_dirty_pages_pct</code></a>
                    default value was increased from 75 to 90.
                    <code class="literal">InnoDB</code> attempts to flush data
                    from the buffer pool so that the percentage of dirty
                    pages does not exceed this value. The increased
                    default value permits a greater percentage of dirty
                    pages in the buffer pool.
</p></li></ul>
</div>
</li><li class="listitem"><p>
                The default
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_autoinc_lock_mode"><code class="literal">innodb_autoinc_lock_mode</code></a>
                setting is now 2 (interleaved). Interleaved lock mode
                permits the execution of multi-row inserts in parallel,
                which improves concurrency and scalability. The new
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_autoinc_lock_mode"><code class="literal">innodb_autoinc_lock_mode</code></a>
                default setting reflects the change from statement-based
                replication to row based replication as the default
                replication type in MySQL 5.7.
                Statement-based replication requires the consecutive
                auto-increment lock mode (the previous default) to
                ensure that auto-increment values are assigned in a
                predictable and repeatable order for a given sequence of
                SQL statements, whereas row-based replication is not
                sensitive to the execution order of SQL statements. For
                more information, see
                <a class="xref" href="innodb-storage-engine.html#innodb-auto-increment-lock-modes" title="InnoDB AUTO_INCREMENT Lock Modes">InnoDB AUTO_INCREMENT Lock Modes</a>.
              </p><p>
                For systems that use statement-based replication, the
                new
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_autoinc_lock_mode"><code class="literal">innodb_autoinc_lock_mode</code></a>
                default setting may break applications that depend on
                sequential auto-increment values. To restore the
                previous default, set
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_autoinc_lock_mode"><code class="literal">innodb_autoinc_lock_mode</code></a>
                to 1.
              </p></li><li class="listitem"><p>
                Renaming a general tablespace is supported by
                <a class="link" href="sql-syntax.html#alter-tablespace" title="13.1.9 ALTER TABLESPACE Syntax"><code class="literal">ALTER
                TABLESPACE ... RENAME TO</code></a> syntax.
              </p></li><li class="listitem"><p>
                The new
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_dedicated_server"><code class="literal">innodb_dedicated_server</code></a>
                configuration option, which is disabled by default, can
                be used to have <code class="literal">InnoDB</code> automatically
                configure the following options according to the amount
                of memory detected on the server:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_buffer_pool_size"><code class="literal">innodb_buffer_pool_size</code></a>
                  </p></li><li class="listitem"><p>
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_file_size"><code class="literal">innodb_log_file_size</code></a>
                  </p></li><li class="listitem"><p>
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_flush_method"><code class="literal">innodb_flush_method</code></a>
</p></li></ul>
</div>
<p>
                This option is intended for MySQL server instances that
                run on a dedicated server. For more information, see
                <a class="xref" href="innodb-storage-engine.html#innodb-dedicated-server" title="15.6.13 Enabling Automatic Configuration for a Dedicated MySQL Server">Section 15.6.13, “Enabling Automatic Configuration for a Dedicated MySQL Server”</a>.
              </p></li><li class="listitem"><p>
                The new
                <a class="link" href="information-schema.html#innodb-tablespaces-brief-table" title="24.33.25 The INFORMATION_SCHEMA INNODB_TABLESPACES_BRIEF Table"><code class="literal">INFORMATION_SCHEMA.INNODB_TABLESPACES_BRIEF</code></a>
                view provides space, name, path, flag, and space type
                data for <code class="literal">InnoDB</code> tablespaces.
              </p></li><li class="listitem"><p>
                The <a class="ulink" href="http://www.zlib.net/" target="_top">zlib
                library</a> version bundled with MySQL was raised
                from version 1.2.3 to version 1.2.11. MySQL implements
                compression with the help of the zlib library.
              </p><p>
                If you use <code class="literal">InnoDB</code> compressed tables,
                see <a class="xref" href="installing.html#upgrading-from-previous-series" title="2.11.1.2 Changes Affecting Upgrades to MySQL 8.0">Section 2.11.1.2, “Changes Affecting Upgrades to MySQL 8.0”</a> for
                related upgrade implications.
              </p></li><li class="listitem"><p>
                Serialized Dictionary Information (SDI) is present in
                all <code class="literal">InnoDB</code> tablespace files except
                for temporary tablespace and undo tablespace files. SDI
                is serialized metadata for table and tablespace objects.
                The presence of SDI data provides metadata redundancy.
                For example, dictionary object metadata may be extracted
                from tablespace files if the data dictionary becomes
                unavailable. SDI extraction is performed using the
                <a class="link" href="programs.html#ibd2sdi" title="4.6.1 ibd2sdi — InnoDB Tablespace SDI Extraction Utility"><span class="command"><strong>ibd2sdi</strong></span></a> tool. SDI data is stored in
                <code class="literal">JSON</code> format.
              </p><p>
                The inclusion of SDI data in tablespace files increases
                tablespace file size. An SDI record requires a single
                index page, which is 16k in size by default. However,
                SDI data is compressed when it is stored to reduce the
                storage footprint.
              </p></li><li class="listitem"><p>
                The <code class="literal">InnoDB</code> storage engine now
                supports atomic DDL, which ensures that DDL operations
                are either fully committed or rolled back, even if the
                server halts during the operation. For more information,
                see <a class="xref" href="sql-syntax.html#atomic-ddl" title="13.1.1 Atomic Data Definition Statement Support">Section 13.1.1, “Atomic Data Definition Statement Support”</a>.
              </p></li><li class="listitem"><p>
                Tablespace files can be moved or restored to a new
                location while the server is offline using the
                <a class="link" href="innodb-storage-engine.html#sysvar_innodb_directories"><code class="literal">innodb_directories</code></a>
                option. For more information, see
                <a class="xref" href="innodb-storage-engine.html#innodb-moving-data-files-offline" title="15.7.7 Moving Tablespace Files While the Server is Offline">Section 15.7.7, “Moving Tablespace Files While the Server is Offline”</a>.
              </p></li><li class="listitem"><p>
                The following redo logging optimizations were
                implemented:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    User threads can now write concurrently to the log
                    buffer without synchronizing writes.
                  </p></li><li class="listitem"><p>
                    User threads can now add dirty pages to the flush
                    list in a relaxed order.
                  </p></li><li class="listitem"><p>
                    A dedicated log thread is now responsible for
                    writing the log buffer to the system buffers,
                    flushing system buffers to disk, notifying user
                    threads about written and flushed redo, maintaining
                    the lag required for the relaxed flush list order,
                    and write checkpoints.
                  </p></li><li class="listitem"><p>
                    System variables were added for configuring the use
                    of spin delay by user threads waiting for flushed
                    redo:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
                        <a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_wait_for_flush_spin_hwm"><code class="literal">innodb_log_wait_for_flush_spin_hwm</code></a>:
                        Defines the maximum average log flush time
                        beyond which user threads no longer spin while
                        waiting for flushed redo.
                      </p></li><li class="listitem"><p>
                        <a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_spin_cpu_abs_lwm"><code class="literal">innodb_log_spin_cpu_abs_lwm</code></a>:
                        Defines the minimum amount of CPU usage below
                        which user threads no longer spin while waiting
                        for flushed redo.
                      </p></li><li class="listitem"><p>
                        <a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_spin_cpu_pct_hwm"><code class="literal">innodb_log_spin_cpu_pct_hwm</code></a>:
                        Defines the maximum amount of CPU usage above
                        which user threads no longer spin while waiting
                        for flushed redo.
</p></li></ul>
</div>
</li><li class="listitem"><p>
                    The
                    <a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_buffer_size"><code class="literal">innodb_log_buffer_size</code></a>
                    configuration option is now dynamic, which permits
                    resizing of the log buffer while the server is
                    running.
</p></li></ul>
</div>
<p>
                For more information, see
                <a class="xref" href="optimization.html#optimizing-innodb-logging" title="8.5.4 Optimizing InnoDB Redo Logging">Section 8.5.4, “Optimizing InnoDB Redo Logging”</a>.
</p></li></ul>
</div>
</li><li class="listitem"><p><b>Character set support. </b>
              The default character set has changed from
              <code class="literal">latin1</code> to <code class="literal">utf8mb4</code>.
              The <code class="literal">utf8mb4</code> character set has several
              new collations, including
              <code class="literal">utf8mb4_ja_0900_as_cs</code>, the first
              Japanese language-specific collation available for Unicode
              in MySQL. For more information, see
              <a class="xref" href="charset.html#charset-unicode-sets" title="10.10.1 Unicode Character Sets">Section 10.10.1, “Unicode Character Sets”</a>.
            </p></li><li class="listitem"><p><b>JSON enhancements. </b>
              The following enhancements or additions were made to
              MySQL's JSON functionality:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                Added the
                <a class="link" href="functions.html#operator_json-inline-path"><code class="literal">-&gt;&gt;</code></a>
                (inline path) operator, which is equivalent to calling
                <a class="link" href="functions.html#function_json-unquote"><code class="literal">JSON_UNQUOTE()</code></a> on the
                result of <a class="link" href="functions.html#function_json-extract"><code class="literal">JSON_EXTRACT()</code></a>.
              </p><p>
                This is a refinement of the column path operator
                <a class="link" href="functions.html#operator_json-column-path"><code class="literal">-&gt;</code></a>
                introduced in MySQL 5.7;
                <code class="literal">col-&gt;&gt;"$.path"</code> is equivalent to
                <code class="literal">JSON_UNQUOTE(col-&gt;"$.path")</code>. The
                inline path operator can be used wherever you can use
                <code class="literal">JSON_UNQUOTE(JSON_EXTRACT())</code>, such
                <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> column lists,
                <code class="literal">WHERE</code> and <code class="literal">HAVING</code>
                clauses, and <code class="literal">ORDER BY</code> and
                <code class="literal">GROUP BY</code> clauses. For more
                information, see the description of the operator, as
                well as <a class="xref" href="functions.html#json-path-syntax" title="12.16.8 JSON Path Syntax">Section 12.16.8, “JSON Path Syntax”</a>.
              </p></li><li class="listitem"><p>
                Added two JSON aggregation functions
                <a class="link" href="functions.html#function_json-arrayagg"><code class="literal">JSON_ARRAYAGG()</code></a> and
                <a class="link" href="functions.html#function_json-objectagg"><code class="literal">JSON_OBJECTAGG()</code></a>.
                <code class="literal">JSON_ARRAYAGG()</code> takes a column or
                expression as its argument, and aggregates the result as
                a single <a class="link" href="data-types.html#json" title="11.6 The JSON Data Type"><code class="literal">JSON</code></a> array. The
                expression can evaluate to any MySQL data type; this
                does not have to be a <code class="literal">JSON</code> value.
                <code class="literal">JSON_OBJECTAGG()</code> takes two columns or
                expressions which it interprets as a key and a value; it
                returns the result as a single <code class="literal">JSON</code>
                object. For more information and examples, see
                <a class="xref" href="functions.html#group-by-functions-and-modifiers" title="12.19 Aggregate (GROUP BY) Functions">Section 12.19, “Aggregate (GROUP BY) Functions”</a>.
              </p></li><li class="listitem"><p>
                Added the JSON utility function
                <a class="link" href="functions.html#function_json-pretty"><code class="literal">JSON_PRETTY()</code></a>, which
                outputs an existing <a class="link" href="data-types.html#json" title="11.6 The JSON Data Type"><code class="literal">JSON</code></a>
                value in an easy-to-read format; each JSON object member
                or array value is printed on a separate line, and a
                child object or array is intended 2 spaces with respect
                to its parent.
              </p><p>
                This function also works with a string that can be
                parsed as a JSON value.
              </p><p>
                For more detailed information and examples, see
                <a class="xref" href="functions.html#json-utility-functions" title="12.16.7 JSON Utility Functions">Section 12.16.7, “JSON Utility Functions”</a>.
              </p></li><li class="listitem"><p>
                When sorting <a class="link" href="data-types.html#json" title="11.6 The JSON Data Type"><code class="literal">JSON</code></a> values
                in a query using <code class="literal">ORDER BY</code>, each value
                is now represented by a variable-length part of the sort
                key, rather than a part of a fixed 1K in size. In many
                cases this can reduce excessive usage; for example, a
                scalar <code class="literal">INT</code> or even
                <code class="literal">BIGINT</code> value actually requires very
                few bytes, so that the remainder of this space (up to
                90% or more) was taken up by padding. This change has
                the following benefits for performance:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    Sort buffer space is now used more effectively, so
                    that filesorts need not flush to disk as early or
                    often as with fixed-length sort keys. This means
                    that more data can be sorted in memory, avoiding
                    unnecessary disk access.
                  </p></li><li class="listitem"><p>
                    Shorter keys can be compared more quickly than
                    longer ones, providing a noticeable improvement in
                    performance. This is true for sorts performed
                    entirely in memory as well as for sorts that require
                    writing to and reading from disk.
</p></li></ul>
</div>
</li><li class="listitem"><p>
                Added support in MySQL 8.0.2 for partial, in-place
                updates of <code class="literal">JSON</code> column values, which
                is more efficient than completely removing an existing
                JSON value and writing a new one in its place, as was
                done previously when updating any
                <code class="literal">JSON</code> column. For this optimization to
                be applied, the update must be applied using
                <a class="link" href="functions.html#function_json-set"><code class="literal">JSON_SET()</code></a>,
                <a class="link" href="functions.html#function_json-replace"><code class="literal">JSON_REPLACE()</code></a>, or
                <a class="link" href="functions.html#function_json-remove"><code class="literal">JSON_REMOVE()</code></a>. New
                elements cannot be added to the JSON document being
                updated; values within the document cannot take more
                space than they did before the update. See
                <a class="xref" href="data-types.html#json-partial-updates" title="Partial Updates of JSON Values">Partial Updates of JSON Values</a>, for a detailed
                discussion of the requirements.
              </p><p>
                Partial updates of JSON documents can be written to the
                binary log, taking up less space than logging complete
                JSON documents. Partial updates are always logged as
                such when statement-based replication is in use. For
                this to work with row-based replication, you must first
                set
                <a class="link" href="replication.html#sysvar_binlog_row_value_options"><code class="literal">binlog_row_value_options=PARTIAL_JSON</code></a>;
                see this variable's description for more
                information.
              </p></li><li class="listitem"><p>
                Added the JSON utility functions
                <a class="link" href="functions.html#function_json-storage-size"><code class="literal">JSON_STORAGE_SIZE()</code></a> and
                <a class="link" href="functions.html#function_json-storage-free"><code class="literal">JSON_STORAGE_FREE()</code></a>.
                <code class="literal">JSON_STORAGE_SIZE()</code> returns the
                storage space in bytes used for the binary
                representation of a JSON document prior to any partial
                update (see previous item).
                <code class="literal">JSON_STORAGE_FREE()</code> shows the amount
                of space remaining in a table column of type
                <a class="link" href="data-types.html#json" title="11.6 The JSON Data Type"><code class="literal">JSON</code></a> after it has been
                partially updated using <code class="literal">JSON_SET()</code> or
                <code class="literal">JSON_REPLACE()</code>; this is greater than
                zero if the binary representation of the new value is
                less than that of the previous value.
              </p><p>
                Each of these functions also accepts a valid string
                representation of a JSON document. For such a value,
                <code class="literal">JSON_STORAGE_SIZE()</code> returns the space
                used by its binary representation following its
                conversion to a JSON document. For a variable containing
                the string representation of a JSON document,
                <code class="literal">JSON_STORAGE_FREE()</code> returns zero.
                Either function produces an error if its (non-null)
                argument cannot be parsed as a valid JSON document, and
                <code class="literal">NULL</code> if the argument is
                <code class="literal">NULL</code>.
              </p><p>
                For more information and examples, see
                <a class="xref" href="functions.html#json-utility-functions" title="12.16.7 JSON Utility Functions">Section 12.16.7, “JSON Utility Functions”</a>.
              </p><p>
                <code class="literal">JSON_STORAGE_SIZE()</code> and
                <code class="literal">JSON_STORAGE_FREE()</code> were implemented
                in MySQL 8.0.2.
              </p></li><li class="listitem"><p>
                Added support in MySQL 8.0.2 for ranges such as
                <code class="literal">$[1 to 5]</code> in XPath expressions. Also
                added support in this version for the
                <code class="literal">last</code> keyword and relative addressing,
                such that <code class="literal">$[last]</code> always selects the
                last (highest-numbered) element in the array and
                <code class="literal">$[last-1]</code> the next to last element.
                <code class="literal">last</code> and expressions using it can
                also be included in range definitions; for example,
                <code class="literal">$[last-2 to last-1]</code> returns the last
                two elements but one from an array. See
                <a class="xref" href="data-types.html#json-paths" title="Searching and Modifying JSON Values">Searching and Modifying JSON Values</a>, for additional information
                and examples.
              </p></li><li class="listitem"><p>
                Added a JSON merge function intended to conform to
                <a class="ulink" href="https://tools.ietf.org/html/rfc7396" target="_top">RFC
                7396</a>.
                <a class="link" href="functions.html#function_json-merge-patch"><code class="literal">JSON_MERGE_PATCH()</code></a>, when
                used on 2 JSON objects, merges them into a single JSON
                object that has as members a union of the following
                sets:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: square; "><li class="listitem"><p>
                    Each member of the first object for which there is
                    no member with the same key in the second object.
                  </p></li><li class="listitem"><p>
                    Each member of the second object for which there is
                    no member having the same key in the first object,
                    and whose value is not the JSON
                    <code class="literal">null</code> literal.
                  </p></li><li class="listitem"><p>
                    Each member having a key that exists in both
                    objects, and whose value in the second object is not
                    the JSON <code class="literal">null</code> literal.
</p></li></ul>
</div>
<p>
                As part of this work, the
                <a class="link" href="functions.html#function_json-merge"><code class="literal">JSON_MERGE()</code></a> function has
                been renamed
                <a class="link" href="functions.html#function_json-merge-preserve"><code class="literal">JSON_MERGE_PRESERVE()</code></a>.
                <code class="literal">JSON_MERGE()</code> continues to be
                recognized as an alias for
                <code class="literal">JSON_MERGE_PRESERVE()</code> in MySQL
                8.0, but is now deprecated and is subject
                to removal in a future version of MySQL.
              </p><p>
                For more information and examples, see
                <a class="xref" href="functions.html#json-modification-functions" title="12.16.4 Functions That Modify JSON Values">Section 12.16.4, “Functions That Modify JSON Values”</a>.
              </p></li><li class="listitem"><p>
                Implemented <span class="quote">“<span class="quote">last duplicate key wins</span>”</span>
                normalization of duplicate keys, consistent with
                <a class="ulink" href="https://tools.ietf.org/html/rfc7159" target="_top">RFC
                7159</a> and most JavaScript parsers. An example of
                this behavior is shown here, where only the rightmost
                member having the key <code class="literal">x</code> is preserved:
              </p><pre data-lang="sql" class="programlisting">
mysql&gt; SELECT <strong class="userinput"><code>JSON_OBJECT('x', '32', 'y', '[true, false]',</code></strong> 
     &gt;                     <strong class="userinput"><code>'x', '"abc"', 'x', '100') AS Result;</code></strong>
+------------------------------------+
| Result                             |
+------------------------------------+
| {"x": "100", "y": "[true, false]"} |
+------------------------------------+
1 row in set (0.00 sec)
</pre><p>
                Values inserted into MySQL
                <a class="link" href="data-types.html#json" title="11.6 The JSON Data Type"><code class="literal">JSON</code></a> columns are also
                normalized in this way, as shown in this example:
              </p><pre data-lang="sql" class="programlisting">
mysql&gt; <strong class="userinput"><code>CREATE TABLE t1 (c1 JSON);</code></strong>

mysql&gt; <strong class="userinput"><code>INSERT INTO t1 VALUES ('{"x": 17, "x": "red", "x": [3, 5, 7]}');</code></strong>

mysql&gt; <strong class="userinput"><code>SELECT c1 FROM t1;</code></strong>
+------------------+
| c1               |
+------------------+
| {"x": [3, 5, 7]} |
+------------------+
</pre><p>
                This is an incompatible change from previous versions of
                MySQL, where a <span class="quote">“<span class="quote">first duplicate key wins</span>”</span>
                algorithm was used in such cases.
              </p><p>
                See <a class="xref" href="data-types.html#json-normalization" title="Normalization, Merging, and Autowrapping of JSON Values">Normalization, Merging, and Autowrapping of JSON Values</a>, for more
                information and examples.
              </p></li><li class="listitem"><p>
                Added the <a class="link" href="functions.html#function_json-table"><code class="literal">JSON_TABLE()</code></a>
                function in MySQL 8.0.4. This function accepts JSON data
                and returns it as a relational table having the
                specified columns.
              </p><p>
                This function has the syntax
                <code class="literal">JSON_TABLE(<em class="replaceable"><code>expr</code></em>,
                <em class="replaceable"><code>path</code></em> COLUMNS
                <em class="replaceable"><code>column_list</code></em>) [AS]
                <em class="replaceable"><code>alias</code></em>)</code>, where
                <em class="replaceable"><code>expr</code></em> is an expression that
                returns JSON data, <em class="replaceable"><code>path</code></em> is a
                JSON path applied to the source, and
                <em class="replaceable"><code>column_list</code></em> is a list of
                column definitions. An example is shown here:
              </p><pre data-lang="sql" class="programlisting">
mysql&gt; <em class="replaceable"><code>SELECT *</code></em> 
    -&gt; <em class="replaceable"><code>FROM</code></em>  
    -&gt;   <em class="replaceable"><code>JSON_TABLE(</code></em>
    -&gt;     <em class="replaceable"><code>'[{"a":3,"b":"0"},{"a":"3","b":"1"},{"a":2,"b":1},{"a":0},{"b":[1,2]}]',</code></em>
    -&gt;     <em class="replaceable"><code>"$[*]" COLUMNS(</code></em>
    -&gt;       <em class="replaceable"><code>rowid FOR ORDINALITY,</code></em>
    -&gt;   
    -&gt;       <em class="replaceable"><code>xa INT EXISTS PATH "$.a",</code></em>
    -&gt;       <em class="replaceable"><code>xb INT EXISTS PATH "$.b",</code></em>
    -&gt;       
    -&gt;       <em class="replaceable"><code>sa VARCHAR(100) PATH "$.a",</code></em>
    -&gt;       <em class="replaceable"><code>sb VARCHAR(100) PATH "$.b",</code></em>
    -&gt;       
    -&gt;       <em class="replaceable"><code>ja JSON PATH "$.a",</code></em>       
    -&gt;       <em class="replaceable"><code>jb JSON PATH "$.b"</code></em>
    -&gt;     <em class="replaceable"><code>)</code></em>   
    -&gt;   <em class="replaceable"><code>) AS  jt1;</code></em>
+-------+------+------+------+------+------+--------+
| rowid | xa   | xb   | sa   | sb   | ja   | jb     |
+-------+------+------+------+------+------+--------+
|     1 |    1 |    1 | 3    | 0    | 3    | "0"    |
|     2 |    1 |    1 | 3    | 1    | "3"  | "1"    |
|     3 |    1 |    1 | 2    | 1    | 2    | 1      |
|     4 |    1 |    0 | 0    | NULL | 0    | NULL   |
|     5 |    0 |    1 | NULL | NULL | NULL | [1, 2] |
+-------+------+------+------+------+------+--------+
</pre><p>
                The JSON source expression can be any expression that
                yields a valid JSON document, including a JSON literal,
                a table column, or a function call that returns JSON
                such as <a class="link" href="functions.html#function_json-extract"><code class="literal">JSON_EXTRACT(t1, data,
                '$.post.comments')</code></a>. For more information, see
                <a class="xref" href="functions.html#json-table-functions" title="12.16.6 JSON Table Functions">Section 12.16.6, “JSON Table Functions”</a>.
</p></li></ul>
</div>
</li><li class="listitem"><p><b>Optimizer. </b>
              These optimizer enhancements were added:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                MySQL now supports invisible indexes. An invisible index
                is not used by the optimizer at all, but is otherwise
                maintained normally. Indexes are visible by default.
                Invisible indexes make it possible to test the effect of
                removing an index on query performance, without making a
                destructive change that must be undone should the index
                turn out to be required. See
                <a class="xref" href="optimization.html#invisible-indexes" title="8.3.12 Invisible Indexes">Section 8.3.12, “Invisible Indexes”</a>.
              </p></li><li class="listitem"><p>
                MySQL now supports descending indexes:
                <code class="literal">DESC</code> in an index definition is no
                longer ignored but causes storage of key values in
                descending order. Previously, indexes could be scanned
                in reverse order but at a performance penalty. A
                descending index can be scanned in forward order, which
                is more efficient. Descending indexes also make it
                possible for the optimizer to use multiple-column
                indexes when the most efficient scan order mixes
                ascending order for some columns and descending order
                for others. See <a class="xref" href="optimization.html#descending-indexes" title="8.3.13 Descending Indexes">Section 8.3.13, “Descending Indexes”</a>.
</p></li></ul>
</div>
</li><li class="listitem"><p><b>Common table expressions. </b>
              MySQL now supports common table expressions, both
              nonrecursive and recursive. Common table expressions
              enable use of named temporary result sets, implemented by
              permitting a <a class="link" href="sql-syntax.html#with" title="13.2.13 WITH Syntax (Common Table Expressions)"><code class="literal">WITH</code></a> clause
              preceding <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statements
              and certain other statements. For more information, see
              <a class="xref" href="sql-syntax.html#with" title="13.2.13 WITH Syntax (Common Table Expressions)">Section 13.2.13, “WITH Syntax (Common Table Expressions)”</a>.
            </p></li><li class="listitem"><p><b>Window functions. </b>
              MySQL now supports window functions that, for each row
              from a query, perform a calculation using rows related to
              that row. These include functions such as
              <a class="link" href="functions.html#function_rank"><code class="literal">RANK()</code></a>,
              <a class="link" href="functions.html#function_lag"><code class="literal">LAG()</code></a>, and
              <a class="link" href="functions.html#function_ntile"><code class="literal">NTILE()</code></a>. In addition,
              several existing aggregate functions now can be used as
              window functions; for example,
              <a class="link" href="functions.html#function_sum"><code class="literal">SUM()</code></a> and
              <a class="link" href="functions.html#function_avg"><code class="literal">AVG()</code></a>. For more
              information, see <a class="xref" href="functions.html#window-functions" title="12.20 Window Functions">Section 12.20, “Window Functions”</a>.
            </p></li><li class="listitem"><p><b>Regular expression support. </b>
              Previously, MySQL used the Henry Spencer regular
              expression library to support regular expression operators
              (<a class="link" href="functions.html#operator_regexp"><code class="literal">REGEXP</code></a>,
              <a class="link" href="functions.html#operator_regexp"><code class="literal">RLIKE</code></a>).
              Regular expression support has been reimplemented using
              International Components for Unicode (ICU), which provides
              full Unicode support and is multibyte safe. The
              <a class="link" href="functions.html#function_regexp-like"><code class="literal">REGEXP_LIKE()</code></a> function
              performs regular expression matching in the manner of the
              <a class="link" href="functions.html#operator_regexp"><code class="literal">REGEXP</code></a> and
              <a class="link" href="functions.html#operator_regexp"><code class="literal">RLIKE</code></a>
              operators, which now are synonyms for that function. In
              addition, the
              <a class="link" href="functions.html#function_regexp-instr"><code class="literal">REGEXP_INSTR()</code></a>,
              <a class="link" href="functions.html#function_regexp-replace"><code class="literal">REGEXP_REPLACE()</code></a>, and
              <a class="link" href="functions.html#function_regexp-substr"><code class="literal">REGEXP_SUBSTR()</code></a> functions
              are available to find match positions and perform
              substring substitution and extraction, respectively. The
              <a class="link" href="server-administration.html#sysvar_regexp_stack_limit"><code class="literal">regexp_stack_limit</code></a> and
              <a class="link" href="server-administration.html#sysvar_regexp_time_limit"><code class="literal">regexp_time_limit</code></a> system
              variables provide control over resource consumption by the
              match engine. For more information, see
              <a class="xref" href="functions.html#regexp" title="12.5.2 Regular Expressions">Section 12.5.2, “Regular Expressions”</a>. For information about ways in
              which applications that use regular expressions may be
              affected by the implementation change, see
              <a class="xref" href="functions.html#regexp-compatibility" title="Regular Expression Compatibility Considerations">Regular Expression Compatibility Considerations</a>.
            </p></li><li class="listitem"><p><b>Internal temporary tables. </b>
              The <code class="literal">TempTable</code> storage engine replaces
              the <code class="literal">MEMORY</code> storage engine as the
              default engine for in-memory internal temporary tables.
              The <code class="literal">TempTable</code> storage engine provides
              efficient storage for
              <a class="link" href="data-types.html#char" title="11.4.1 The CHAR and VARCHAR Types"><code class="literal">VARCHAR</code></a> and
              <a class="link" href="data-types.html#binary-varbinary" title="11.4.2 The BINARY and VARBINARY Types"><code class="literal">VARBINARY</code></a> columns. The
              <a class="link" href="server-administration.html#sysvar_internal_tmp_mem_storage_engine"><code class="literal">internal_tmp_mem_storage_engine</code></a>
              session variable defines the storage engine for in-memory
              internal temporary tables. Permitted values are
              <code class="literal">TempTable</code> (the default) and
              <code class="literal">MEMORY</code>. The
              <a class="link" href="server-administration.html#sysvar_temptable_max_ram"><code class="literal">temptable_max_ram</code></a>
              configuration option defines the maximum amount of memory
              that the <code class="literal">TempTable</code> storage engine can
              use before data is stored to disk.
            </p></li><li class="listitem"><p><b>Logging. </b>
              Error logging was rewritten to use the MySQL component
              architecture. Traditional error logging is implemented
              using built-in components, and logging using the system
              log is implemented as a loadable component. In addition, a
              loadable JSON log writer is available. To control which
              log components to enable, use the
              <a class="link" href="server-administration.html#sysvar_log_error_services"><code class="literal">log_error_services</code></a> system
              variable. For more information, see
              <a class="xref" href="server-administration.html#error-log" title="5.4.2 The Error Log">Section 5.4.2, “The Error Log”</a>.
            </p></li><li class="listitem"><p><b>Backup lock. </b>
              A new type of backup lock permits DML during an online
              backup while preventing operations that could result in an
              inconsistent snapshot. The new backup lock is supported by
              <a class="link" href="sql-syntax.html#lock-instance-for-backup" title="13.3.5 LOCK INSTANCE FOR BACKUP and UNLOCK INSTANCE Syntax"><code class="literal">LOCK INSTANCE FOR BACKUP</code></a>
              and
              <a class="link" href="sql-syntax.html#lock-instance-for-backup" title="13.3.5 LOCK INSTANCE FOR BACKUP and UNLOCK INSTANCE Syntax"><code class="literal">UNLOCK
              INSTANCE</code></a> syntax. The
              <a class="link" href="security.html#priv_backup-admin"><code class="literal">BACKUP_ADMIN</code></a> privilege is
              required to use these statements.
            </p></li><li class="listitem"><p><b>Replication. </b>
              The following enhancements have been made to MySQL
              Replication:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                MySQL Replication now supports binary logging of partial
                updates to JSON documents using a compact binary format,
                saving space in the log over logging complete JSON
                documents. Such compact logging is done automatically
                when statement-based logging is in use, and can be
                enabled by setting the new
                <code class="literal">binlog_row_value_options</code> system
                variable to <code class="literal">PARTIAL_JSON</code>. For more
                information, see <a class="xref" href="data-types.html#json-partial-updates" title="Partial Updates of JSON Values">Partial Updates of JSON Values</a>,
                as well as the description of
                <a class="link" href="replication.html#sysvar_binlog_row_value_options"><code class="literal">binlog_row_value_options</code></a>.
</p></li></ul>
</div>
</li></ul>
</div>

</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="mysql-nutshell-deprecations"></a>Features Deprecated in MySQL 8.0</h3>

</div>

</div>

</div>
<p>
        The following features are deprecated in MySQL 8.0
        and may be or will be removed in a future series. Where
        alternatives are shown, applications should be updated to use
        them.
      </p><p>
        For applications that use features deprecated in MySQL
        8.0 that have been removed in a higher MySQL
        series, statements may fail when replicated from a MySQL
        8.0 master to a higher-series slave, or may have
        different effects on master and slave. To avoid such problems,
        applications that use features deprecated in 8.0
        should be revised to avoid them and use alternatives when
        possible.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            As of MySQL 8.0.4, the <code class="literal">validate_password</code>
            plugin has been reimplemented to use the server component
            infrastructure. The plugin form of
            <code class="literal">validate_password</code> is still available but
            is deprecated and will be removed in a future version of
            MySQL. MySQL installations that use the plugin should make
            the transition to using the component instead. See
            <a class="xref" href="security.html#validate-password-transitioning" title="6.5.3.3 Transitioning to the Password Validation Component">Section 6.5.3.3, “Transitioning to the Password Validation Component”</a>.
          </p></li><li class="listitem"><p>
            The <a class="link" href="sql-syntax.html#alter-tablespace" title="13.1.9 ALTER TABLESPACE Syntax"><code class="literal">ALTER TABLESPACE</code></a> and
            <a class="link" href="sql-syntax.html#drop-tablespace" title="13.1.30 DROP TABLESPACE Syntax"><code class="literal">DROP TABLESPACE</code></a>
            <code class="literal">ENGINE</code> clause is deprecated.
          </p></li><li class="listitem"><p>
            The <a class="link" href="functions.html#function_json-merge"><code class="literal">JSON_MERGE()</code></a> function is
            deprecated as of MySQL 8.0.3. Use
            <a class="link" href="functions.html#function_json-merge-preserve"><code class="literal">JSON_MERGE_PRESERVE()</code></a>
            instead.
</p></li></ul>
</div>

</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="mysql-nutshell-removals"></a>Features Removed in MySQL 8.0</h3>

</div>

</div>

</div>
<p>
        The following items are obsolete and have been removed in MySQL
        8.0. Where alternatives are shown, applications
        should be updated to use them.
      </p><p>
        For MySQL 5.7 applications that use features
        removed in MySQL 8.0, statements may fail when
        replicated from a MySQL 5.7 master to a MySQL
        8.0 slave, or may have different effects on master
        and slave. To avoid such problems, applications that use
        features removed in MySQL 8.0 should be revised to
        avoid them and use alternatives when possible.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            The <code class="literal">information_schema_stats</code>
            configuration option, introduced in MySQL 8.0.0, was removed
            and replaced by
            <a class="link" href="server-administration.html#sysvar_information_schema_stats_expiry"><code class="literal">information_schema_stats_expiry</code></a>
            in MySQL 8.0.3.
          </p><p>
            <code class="literal">information_schema_stats_expiry</code> defines
            an expiration setting for cached
            <a class="link" href="information-schema.html" title="Chapter 24 INFORMATION_SCHEMA Tables"><code class="literal">INFORMATION_SCHEMA</code></a> table
            statistics. For more information, see
            <a class="xref" href="optimization.html#information-schema-optimization" title="8.2.3 Optimizing INFORMATION_SCHEMA Queries">Section 8.2.3, “Optimizing INFORMATION_SCHEMA Queries”</a>.
          </p></li><li class="listitem"><p>
            Code related to obsoleted <code class="literal">InnoDB</code> system
            tables was removed in MySQL 8.0.3.
            <a class="link" href="information-schema.html" title="Chapter 24 INFORMATION_SCHEMA Tables"><code class="literal">INFORMATION_SCHEMA</code></a> views based
            on <code class="literal">InnoDB</code> system tables were replaced by
            internal system views on data dictionary tables. Affected
            <code class="literal">InnoDB</code>
            <a class="link" href="information-schema.html" title="Chapter 24 INFORMATION_SCHEMA Tables"><code class="literal">INFORMATION_SCHEMA</code></a> views were
            renamed:
</p>
<div class="table">
<a name="innodb-new-is-views"></a><p class="title"><b>Table 1.1 Renamed InnoDB Information Schema Views</b></p>
<div class="table-contents">
<table><col width="50%"><col width="50%"><thead><tr>
                <th scope="col">Old Name</th>
                <th scope="col">New Name</th>
              </tr></thead><tbody><tr>
                <td scope="row"><code class="literal">INNODB_SYS_COLUMNS</code></td>
                <td><code class="literal">INNODB_COLUMNS</code></td>
              </tr><tr>
                <td scope="row"><code class="literal">INNODB_SYS_DATAFILES</code></td>
                <td><code class="literal">INNODB_DATAFILES</code></td>
              </tr><tr>
                <td scope="row"><code class="literal">INNODB_SYS_FIELDS</code></td>
                <td><code class="literal">INNODB_FIELDS</code></td>
              </tr><tr>
                <td scope="row"><code class="literal">INNODB_SYS_FOREIGN</code></td>
                <td><code class="literal">INNODB_FOREIGN</code></td>
              </tr><tr>
                <td scope="row"><code class="literal">INNODB_SYS_FOREIGN_COLS</code></td>
                <td><code class="literal">INNODB_FOREIGN_COLS</code></td>
              </tr><tr>
                <td scope="row"><code class="literal">INNODB_SYS_INDEXES</code></td>
                <td><code class="literal">INNODB_INDEXES</code></td>
              </tr><tr>
                <td scope="row"><code class="literal">INNODB_SYS_TABLES</code></td>
                <td><code class="literal">INNODB_TABLES</code></td>
              </tr><tr>
                <td scope="row"><code class="literal">INNODB_SYS_TABLESPACES</code></td>
                <td><code class="literal">INNODB_TABLESPACES</code></td>
              </tr><tr>
                <td scope="row"><code class="literal">INNODB_SYS_TABLESTATS</code></td>
                <td><code class="literal">INNODB_TABLESTATS</code></td>
              </tr><tr>
                <td scope="row"><code class="literal">INNODB_SYS_VIRTUAL</code></td>
                <td><code class="literal">INNODB_VIRTUAL</code></td>
</tr></tbody></table>
</div>

</div>
<br class="table-break"><p>
            After upgrading to MySQL 8.0.3 or later, update any scripts
            that reference previous <code class="literal">InnoDB</code>
            <a class="link" href="information-schema.html" title="Chapter 24 INFORMATION_SCHEMA Tables"><code class="literal">INFORMATION_SCHEMA</code></a> view names.
          </p></li><li class="listitem"><p>
            The following features related to account management have
            been removed:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                Using <a class="link" href="sql-syntax.html#grant" title="13.7.1.6 GRANT Syntax"><code class="literal">GRANT</code></a> to create
                users. Instead, use <a class="link" href="sql-syntax.html#create-user" title="13.7.1.3 CREATE USER Syntax"><code class="literal">CREATE
                USER</code></a>. Following this practice makes the
                <code class="literal">NO_AUTO_CREATE_USER</code> SQL mode
                immaterial for <a class="link" href="sql-syntax.html#grant" title="13.7.1.6 GRANT Syntax"><code class="literal">GRANT</code></a>
                statements, so it too is removed.
              </p></li><li class="listitem"><p>
                Using <a class="link" href="sql-syntax.html#grant" title="13.7.1.6 GRANT Syntax"><code class="literal">GRANT</code></a> to modify
                account properties other than privilege assignments.
                This includes authentication, SSL, and resource-limit
                properties. Instead, establish such properties at
                account-creation time with <a class="link" href="sql-syntax.html#create-user" title="13.7.1.3 CREATE USER Syntax"><code class="literal">CREATE
                USER</code></a> or modify them afterward with
                <a class="link" href="sql-syntax.html#alter-user" title="13.7.1.1 ALTER USER Syntax"><code class="literal">ALTER USER</code></a>.
              </p></li><li class="listitem"><p>
                <code class="literal">IDENTIFIED BY PASSWORD
                '<em class="replaceable"><code>hash_string</code></em>'</code>
                syntax for <a class="link" href="sql-syntax.html#create-user" title="13.7.1.3 CREATE USER Syntax"><code class="literal">CREATE USER</code></a>
                and <a class="link" href="sql-syntax.html#grant" title="13.7.1.6 GRANT Syntax"><code class="literal">GRANT</code></a>. Instead, use
                <code class="literal">IDENTIFIED WITH
                <em class="replaceable"><code>auth_plugin</code></em> AS
                '<em class="replaceable"><code>hash_string</code></em>'</code> for
                <a class="link" href="sql-syntax.html#create-user" title="13.7.1.3 CREATE USER Syntax"><code class="literal">CREATE USER</code></a> and
                <a class="link" href="sql-syntax.html#alter-user" title="13.7.1.1 ALTER USER Syntax"><code class="literal">ALTER USER</code></a>, where the
                <code class="literal">'<em class="replaceable"><code>hash_string</code></em>'</code>
                value is in a format compatible with the named plugin.
              </p><p>
                Additionally, because <code class="literal">IDENTIFIED BY
                PASSWORD</code> syntax has been removed, the
                <a class="link" href="server-administration.html#sysvar_log_builtin_as_identified_by_password"><code class="literal">log_builtin_as_identified_by_password</code></a>
                system variable is superfluous and has been removed.
              </p></li><li class="listitem"><p>
                The <code class="literal">PASSWORD()</code> function.
                Additionally, <code class="literal">PASSWORD()</code> removal
                means that
                <a class="link" href="sql-syntax.html#set-password" title="13.7.1.10 SET PASSWORD Syntax"><code class="literal">SET
                PASSWORD ... =
                PASSWORD('<em class="replaceable"><code>auth_string</code></em>')</code></a>
                syntax is no longer available.
              </p></li><li class="listitem"><p>
                The <a class="link" href="server-administration.html#sysvar_old_passwords"><code class="literal">old_passwords</code></a>
                system variable.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            The query cache has been removed. Removal includes these
            items:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <code class="literal">FLUSH QUERY CACHE</code> and
                <code class="literal">RESET QUERY CACHE</code> statements.
              </p></li><li class="listitem"><p>
                These system variables:
                <a class="link" href="server-administration.html#sysvar_query_cache_limit"><code class="literal">query_cache_limit</code></a>,
                <a class="link" href="server-administration.html#sysvar_query_cache_min_res_unit"><code class="literal">query_cache_min_res_unit</code></a>,
                <a class="link" href="server-administration.html#sysvar_query_cache_size"><code class="literal">query_cache_size</code></a>,
                <a class="link" href="server-administration.html#sysvar_query_cache_type"><code class="literal">query_cache_type</code></a>,
                <a class="link" href="server-administration.html#sysvar_query_cache_wlock_invalidate"><code class="literal">query_cache_wlock_invalidate</code></a>.
              </p></li><li class="listitem"><p>
                These status variables:
                <a class="link" href="server-administration.html#statvar_Qcache_free_blocks"><code class="literal">Qcache_free_blocks</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_free_memory"><code class="literal">Qcache_free_memory</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_hits"><code class="literal">Qcache_hits</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_inserts"><code class="literal">Qcache_inserts</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_lowmem_prunes"><code class="literal">Qcache_lowmem_prunes</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_not_cached"><code class="literal">Qcache_not_cached</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_queries_in_cache"><code class="literal">Qcache_queries_in_cache</code></a>,
                <a class="link" href="server-administration.html#statvar_Qcache_total_blocks"><code class="literal">Qcache_total_blocks</code></a>.
              </p></li><li class="listitem"><p>
                These thread states: <code class="literal">checking privileges on
                cached query</code>, <code class="literal">checking query cache
                for query</code>, <code class="literal">invalidating query cache
                entries</code>, <code class="literal">sending cached result to
                client</code>, <code class="literal">storing result in query
                cache</code>, <code class="literal">Waiting for query cache
                lock</code>.
</p></li></ul>
</div>
<p>
            These deprecated query cache items remain deprecated, but
            have no effect, and will be removed in a future MySQL
            release:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <code class="literal">SQL_CACHE</code> and
                <code class="literal">SQL_NO_CACHE</code>
                <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> modifiers.
              </p></li><li class="listitem"><p>
                The <code class="literal">ndb_cache_check_time</code> system
                variable.
</p></li></ul>
</div>
<p>
            The <code class="literal">have_query_cache</code> system variable
            remains deprecated, always has a value of
            <code class="literal">NO</code>, and will be removed in a future MySQL
            release.
          </p></li><li class="listitem"><p>
            The data dictionary provides information about database
            objects, so the server no longer checks directory names in
            the data directory to find databases. Consequently, the
            <code class="option">--ignore-db-dir</code> option and
            <code class="literal">ignore_db_dirs</code> system variables are
            extraneous and have been removed.
          </p></li><li class="listitem"><p>
            The <code class="literal">tx_isolation</code> and
            <code class="literal">tx_read_only</code> system variables have been
            removed. Use
            <a class="link" href="server-administration.html#sysvar_transaction_isolation"><code class="literal">transaction_isolation</code></a> and
            <a class="link" href="server-administration.html#sysvar_transaction_read_only"><code class="literal">transaction_read_only</code></a>
            instead.
          </p></li><li class="listitem"><p>
            The <code class="literal">sync_frm</code> system variable has been
            removed because <code class="filename">.frm</code> files have become
            obsolete.
          </p></li><li class="listitem"><p>
            The <code class="literal">secure_auth</code> system variable and
            <code class="option">--secure-auth</code> client option have been
            removed. The <code class="literal">MYSQL_SECURE_AUTH</code> option for
            the <a class="link" href="connectors-apis.html#mysql-options" title="27.7.7.50 mysql_options()"><code class="literal">mysql_options()</code></a> C API
            function was removed.
          </p></li><li class="listitem"><p>
            The <code class="literal">multi_range_count</code> system variable has
            been removed.
          </p></li><li class="listitem"><p>
            The <code class="literal">log_warnings</code> system variable and
            <code class="option">--log-warnings</code> server option have been
            removed. Use the
            <a class="link" href="server-administration.html#sysvar_log_error_verbosity"><code class="literal">log_error_verbosity</code></a> system
            variable instead.
          </p></li><li class="listitem"><p>
            The global scope for the
            <a class="link" href="server-administration.html#sysvar_sql_log_bin"><code class="literal">sql_log_bin</code></a> system variable
            has been removed. <code class="literal">sql_log_bin</code> has session
            scope only, and applications that rely on accessing
            <code class="literal">@@global.sql_log_bin</code> should be adjusted.
          </p></li><li class="listitem"><p>
            These deprecated compatibility SQL modes have been removed:
            <code class="literal">DB2</code>, <code class="literal">MAXDB</code>,
            <code class="literal">MSSQL</code>, <code class="literal">MYSQL323</code>,
            <code class="literal">MYSQL40</code>, <code class="literal">ORACLE</code>,
            <code class="literal">POSTGRESQL</code>,
            <code class="literal">NO_FIELD_OPTIONS</code>,
            <code class="literal">NO_KEY_OPTIONS</code>,
            <code class="literal">NO_TABLE_OPTIONS</code>. They can no longer be
            assigned to the <code class="literal">sql_mode</code> system variable
            or used as permitted values for the
            <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a>
            <a class="link" href="programs.html#option_mysqldump_compatible"><code class="option">--compatible</code></a> option.
          </p><p>
            Removal of <code class="literal">MAXDB</code> means that the
            <code class="literal">TIMESTAMP</code> data type for
            <a class="link" href="sql-syntax.html#create-table" title="13.1.18 CREATE TABLE Syntax"><code class="literal">CREATE TABLE</code></a> or
            <a class="link" href="sql-syntax.html#alter-table" title="13.1.8 ALTER TABLE Syntax"><code class="literal">ALTER TABLE</code></a> is no longer
            treated as <a class="link" href="data-types.html#datetime" title="11.3.1 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">DATETIME</code></a>.
          </p></li><li class="listitem"><p>
            The unused <code class="literal">date_format</code>,
            <code class="literal">datetime_format</code>,
            <code class="literal">time_format</code>, and
            <code class="literal">max_tmp_tables</code> system variables have been
            removed.
          </p></li><li class="listitem"><p>
            The <code class="literal">EXTENDED</code> and
            <code class="literal">PARTITIONS</code> keywords for the
            <a class="link" href="sql-syntax.html#explain" title="13.8.2 EXPLAIN Syntax"><code class="literal">EXPLAIN</code></a> statement have been
            removed. These keywords are unnecessary because their effect
            is always enabled.
          </p></li><li class="listitem"><p>
            These encryption-related items have been removed:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <a class="link" href="functions.html#function_encode"><code class="literal">ENCODE()</code></a> and
                <a class="link" href="functions.html#function_decode"><code class="literal">DECODE()</code></a> functions.
              </p></li><li class="listitem"><p>
                The <a class="link" href="functions.html#function_encrypt"><code class="literal">ENCRYPT()</code></a> function.
              </p></li><li class="listitem"><p>
                The <a class="link" href="functions.html#function_des-encrypt"><code class="literal">DES_ENCRYPT()</code></a>, and
                <a class="link" href="functions.html#function_des-decrypt"><code class="literal">DES_DECRYPT()</code></a> functions,
                the <a class="link" href="server-administration.html#option_mysqld_des-key-file"><code class="option">--des-key-file</code></a>
                option, the <a class="link" href="server-administration.html#sysvar_have_crypt"><code class="literal">have_crypt</code></a>
                system variable, the <code class="literal">DES_KEY_FILE</code>
                option for the <a class="link" href="sql-syntax.html#flush" title="13.7.7.3 FLUSH Syntax"><code class="literal">FLUSH</code></a>
                statement, and the <code class="option">HAVE_CRYPT</code>
                <span class="command"><strong>CMake</strong></span> option.
</p></li></ul>
</div>
<p>
            In place of the removed encryption functions: For
            <a class="link" href="functions.html#function_encrypt"><code class="literal">ENCRYPT()</code></a>, consider using
            <a class="link" href="functions.html#function_sha2"><code class="literal">SHA2()</code></a> instead for one-way
            hashing. For the others, consider using
            <a class="link" href="functions.html#function_aes-encrypt"><code class="literal">AES_ENCRYPT()</code></a> and
            <a class="link" href="functions.html#function_aes-decrypt"><code class="literal">AES_DECRYPT()</code></a> instead.
          </p></li><li class="listitem"><p>
            In MySQL 5.7, several spatial functions
            available under multiple names were deprecated to move in
            the direction of making the spatial function namespace more
            consistent, the goal being that each spatial function name
            begin with <code class="literal">ST_</code> if it performs an exact
            operation, or with <code class="literal">MBR</code> if it performs an
            operation based on minimum bounding rectangles. In MySQL
            8.0, the deprecated functions are removed to
            leave only the corresponding <code class="literal">ST_</code> and
            <code class="literal">MBR</code> functions:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                These functions are removed in favor of the
                <code class="literal">MBR</code> names:
                <code class="literal">Contains()</code>,
                <code class="literal">Disjoint()</code>,
                <code class="literal">Equals()</code>,
                <code class="literal">Intersects()</code>,
                <code class="literal">Overlaps()</code>,
                <code class="literal">Within()</code>.
              </p></li><li class="listitem"><p>
                These functions are removed in favor of the
                <code class="literal">ST_</code> names: <code class="literal">Area()</code>,
                <code class="literal">AsBinary()</code>,
                <code class="literal">AsText()</code>, <code class="literal">AsWKB()</code>,
                <code class="literal">AsWKT()</code>, <code class="literal">Buffer()</code>,
                <code class="literal">Centroid()</code>,
                <code class="literal">ConvexHull()</code>,
                <code class="literal">Crosses()</code>,
                <code class="literal">Dimension()</code>,
                <code class="literal">Distance()</code>,
                <code class="literal">EndPoint()</code>,
                <code class="literal">Envelope()</code>,
                <code class="literal">ExteriorRing()</code>,
                <code class="literal">GeomCollFromText()</code>,
                <code class="literal">GeomCollFromWKB()</code>,
                <code class="literal">GeomFromText()</code>,
                <code class="literal">GeomFromWKB()</code>,
                <code class="literal">GeometryCollectionFromText()</code>,
                <code class="literal">GeometryCollectionFromWKB()</code>,
                <code class="literal">GeometryFromText()</code>,
                <code class="literal">GeometryFromWKB()</code>,
                <code class="literal">GeometryN()</code>,
                <code class="literal">GeometryType()</code>,
                <code class="literal">InteriorRingN()</code>,
                <code class="literal">IsClosed()</code>,
                <code class="literal">IsEmpty()</code>,
                <code class="literal">IsSimple()</code>,
                <code class="literal">LineFromText()</code>,
                <code class="literal">LineFromWKB()</code>,
                <code class="literal">LineStringFromText()</code>,
                <code class="literal">LineStringFromWKB()</code>,
                <code class="literal">MLineFromText()</code>,
                <code class="literal">MLineFromWKB()</code>,
                <code class="literal">MPointFromText()</code>,
                <code class="literal">MPointFromWKB()</code>,
                <code class="literal">MPolyFromText()</code>,
                <code class="literal">MPolyFromWKB()</code>,
                <code class="literal">MultiLineStringFromText()</code>,
                <code class="literal">MultiLineStringFromWKB()</code>,
                <code class="literal">MultiPointFromText()</code>,
                <code class="literal">MultiPointFromWKB()</code>,
                <code class="literal">MultiPolygonFromText()</code>,
                <code class="literal">MultiPolygonFromWKB()</code>,
                <code class="literal">NumGeometries()</code>,
                <code class="literal">NumInteriorRings()</code>,
                <code class="literal">NumPoints()</code>,
                <code class="literal">PointFromText()</code>,
                <code class="literal">PointFromWKB()</code>,
                <code class="literal">PointN()</code>,
                <code class="literal">PolyFromText()</code>,
                <code class="literal">PolyFromWKB()</code>,
                <code class="literal">PolygonFromText()</code>,
                <code class="literal">PolygonFromWKB()</code>,
                <code class="literal">SRID()</code>,
                <code class="literal">StartPoint()</code>,
                <code class="literal">Touches()</code>, <code class="literal">X()</code>,
                <code class="literal">Y()</code>.
              </p></li><li class="listitem"><p>
                <code class="literal">GLength()</code> is removed in favor of
                <a class="link" href="functions.html#function_st-length"><code class="literal">ST_Length()</code></a>.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            The functions described in
            <a class="xref" href="functions.html#gis-wkb-functions" title="12.15.4 Functions That Create Geometry Values from WKB Values">Section 12.15.4, “Functions That Create Geometry Values from WKB Values”</a> previously accepted
            either WKB strings or geometry arguments. Geometry arguments
            are no longer permitted and produce an error. See that
            section for guidelines for migrating queries away from using
            geometry arguments.
          </p></li><li class="listitem"><p>
            The parser no longer treats <code class="literal">\N</code> as a
            synonym for <code class="literal">NULL</code> in SQL statements. Use
            <code class="literal">NULL</code> instead.
          </p><p>
            This change does not affect text file import or export
            operations performed with
            <a class="link" href="sql-syntax.html#load-data" title="13.2.7 LOAD DATA INFILE Syntax"><code class="literal">LOAD DATA
            INFILE</code></a> or
            <a class="link" href="sql-syntax.html#select-into" title="13.2.10.1 SELECT ... INTO Syntax"><code class="literal">SELECT ... INTO
            OUTFILE</code></a>, for which <code class="literal">NULL</code>
            continues to be represented by <code class="literal">\N</code>. See
            <a class="xref" href="sql-syntax.html#load-data" title="13.2.7 LOAD DATA INFILE Syntax">Section 13.2.7, “LOAD DATA INFILE Syntax”</a>.
          </p></li><li class="listitem"><p>
            <code class="literal">PROCEDURE ANALYSE()</code> syntax is removed.
          </p></li><li class="listitem"><p>
            The client-side <code class="option">--ssl</code> and
            <code class="option">--ssl-verify-server-cert</code> options have been
            removed. Use
            <a class="link" href="security.html#option_general_ssl-mode"><code class="option">--ssl-mode=REQUIRED</code></a> instead
            of <code class="option">--ssl=1</code> or
            <code class="option">--enable-ssl</code>. Use
            <a class="link" href="security.html#option_general_ssl-mode"><code class="option">--ssl-mode=DISABLED</code></a> instead
            of <code class="option">--ssl=0</code>, <code class="option">--skip-ssl</code>, or
            <code class="option">--disable-ssl</code>. Use
            <a class="link" href="security.html#option_general_ssl-mode"><code class="option">--ssl-mode=VERIFY_IDENTITY</code></a>
            instead of <code class="option">--ssl-verify-server-cert</code>
            options. (The server-side
            <a class="link" href="security.html#option_general_ssl"><code class="option">--ssl</code></a> option remains
            unchanged.)
          </p><p>
            For the C API, <code class="literal">MYSQL_OPT_SSL_ENFORCE</code> and
            <code class="literal">MYSQL_OPT_SSL_VERIFY_SERVER_CERT</code> options
            for <a class="link" href="connectors-apis.html#mysql-options" title="27.7.7.50 mysql_options()"><code class="literal">mysql_options()</code></a>
            correspond to the client-side <code class="option">--ssl</code> and
            <code class="option">--ssl-verify-server-cert</code> options and have
            been removed. Use <code class="literal">MYSQL_OPT_SSL_MODE</code> with
            an option value of <code class="literal">SSL_MODE_REQUIRED</code> or
            <code class="literal">SSL_MODE_VERIFY_IDENTITY</code> instead.
          </p></li><li class="listitem"><p>
            The <a class="link" href="server-administration.html#option_mysqld_temp-pool"><code class="option">--temp-pool</code></a> server option
            has been removed.
          </p></li><li class="listitem"><p>
            The <a class="link" href="innodb-storage-engine.html#option_mysqld_ignore-builtin-innodb"><code class="option">--ignore-builtin-innodb</code></a>
            server option and
            <a class="link" href="innodb-storage-engine.html#sysvar_ignore_builtin_innodb"><code class="literal">ignore_builtin_innodb</code></a>
            system variable have been removed.
          </p></li><li class="listitem"><p>
            The server no longer performs conversion of pre-MySQL 5.1
            database names containing special characters to 5.1 format
            with the addition of a <code class="literal">#mysql50#</code> prefix.
            Because these conversions are no longer performed, the
            <code class="option">--fix-db-names</code> and
            <code class="option">--fix-table-names</code> options for
            <a class="link" href="programs.html#mysqlcheck" title="4.5.3 mysqlcheck — A Table Maintenance Program"><span class="command"><strong>mysqlcheck</strong></span></a>, the <code class="literal">UPGRADE DATA
            DIRECTORY NAME</code> clause for the
            <a class="link" href="sql-syntax.html#alter-database" title="13.1.2 ALTER DATABASE Syntax"><code class="literal">ALTER DATABASE</code></a> statement, and
            the <code class="literal">Com_alter_db_upgrade</code> status variable
            have been removed.
          </p><p>
            Upgrades are supported only from one major version to
            another (for example, 5.0 to 5.1, or 5.1 to 5.5), so there
            should be little remaining need for conversion of older 5.0
            database names to current versions of MySQL. As a
            workaround, upgrade a MySQL 5.0 installation to MySQL 5.1
            before upgrading to a more recent release.
          </p></li><li class="listitem"><p>
            The <span class="command"><strong>mysql_install_db</strong></span> program has been
            removed from MySQL distributions. Data directory
            initialization should be performed by invoking
            <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> with the
            <a class="link" href="server-administration.html#option_mysqld_initialize"><code class="option">--initialize</code></a> or
            <a class="link" href="server-administration.html#option_mysqld_initialize-insecure"><code class="option">--initialize-insecure</code></a> option
            instead. In addition, the <code class="option">--bootstrap</code>
            option for <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> that was used by
            <span class="command"><strong>mysql_install_db</strong></span> has been removed, and
            the <code class="option">INSTALL_SCRIPTDIR</code>
            <code class="literal">CMake</code> option that controlled the
            installation location for
            <span class="command"><strong>mysql_install_db</strong></span> has been removed.
          </p></li><li class="listitem"><p>
            The generic partitioning handler has been removed from the
            MySQL server. In order to support partitioning of a given
            table, the storage engine used for the table must now
            provide its own (<span class="quote">“<span class="quote">native</span>”</span>) partitioning
            handler. The <code class="option">--partition</code> and
            <code class="option">--skip-partition</code> options have been removed
            from the MySQL Server, and partitioning-related entries are
            no longer shown in the output of <a class="link" href="sql-syntax.html#show-plugins" title="13.7.6.25 SHOW PLUGINS Syntax"><code class="literal">SHOW
            PLUGINS</code></a> or in the
            <a class="link" href="information-schema.html#plugins-table" title="24.15 The INFORMATION_SCHEMA PLUGINS Table"><code class="literal">INFORMATION_SCHEMA.PLUGINS</code></a>
            table.
          </p><p>
            Two MySQL storage engines currently provide native
            partitioning
            support—<a class="link" href="innodb-storage-engine.html" title="Chapter 15 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> and
            <a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html" target="_top"><code class="literal">NDB</code></a>; of these, only
            <code class="literal">InnoDB</code> is supported in MySQL
            8.0. Any attempt to create partitioned tables
            in MySQL 8.0 using any other storage engine
            fails.
          </p><p><b>Ramifications for upgrades. </b>
              The direct upgrade of a partitioned table using a storage
              engine other than <code class="literal">InnoDB</code> (such as
              <a class="link" href="storage-engines.html#myisam-storage-engine" title="16.2 The MyISAM Storage Engine"><code class="literal">MyISAM</code></a>) from MySQL
              5.7 (or earlier) to MySQL 8.0
              is not supported. There are two options for handling such
              a table:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                Remove the table's partitioning, using
                <a class="link" href="sql-syntax.html#alter-table-partition-operations" title="13.1.8.1 ALTER TABLE Partition Operations"><code class="literal">ALTER
                TABLE ... REMOVE PARTITIONING</code></a>.
              </p></li><li class="listitem"><p>
                Change the storage engine used for the table to
                <code class="literal">InnoDB</code>, with
                <a class="link" href="sql-syntax.html#alter-table" title="13.1.8 ALTER TABLE Syntax"><code class="literal">ALTER TABLE
                ... ENGINE=INNODB</code></a>.
</p></li></ul>
</div>
<p>
            At least one of the two operations just listed must be
            performed for each partitioned non-<code class="literal">InnoDB</code>
            table prior to upgrading the server to MySQL
            8.0. Otherwise, such a table cannot be used
            following the upgrade.
          </p><p>
            Due to the fact that table creation statements that would
            result in a partitioned table using a storage engine without
            partitioning support now fail with an error
            (<span class="errorcode">ER_CHECK_NOT_IMPLEMENTED</span>), you must
            make sure that any statements in a dump file (such as that
            written by <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a>) from an older
            version of MySQL that you wish to import into a MySQL
            8.0 server that create partitioned tables do
            not also specify a storage engine such as
            <code class="literal">MyISAM</code> that has no native partitioning
            handler. You can do this by performing either of the
            following:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                Remove any references to partitioning from
                <code class="literal">CREATE TABLE</code> statements that use a
                value for the <code class="literal">STORAGE ENGINE</code> option
                other than <code class="literal">InnoDB</code>.
              </p></li><li class="listitem"><p>
                Specifying the storage engine as
                <code class="literal">InnoDB</code>, or allow
                <code class="literal">InnoDB</code> to be used as the table's
                storage engine by default.
</p></li></ul>
</div>
<p>
            For more information, see
            <a class="xref" href="partitioning.html#partitioning-limitations-storage-engines" title="22.6.2 Partitioning Limitations Relating to Storage Engines">Section 22.6.2, “Partitioning Limitations Relating to Storage Engines”</a>.
          </p></li><li class="listitem"><p>
            System and status variable information is no longer
            maintained in the <code class="literal">INFORMATION_SCHEMA</code>.
            These tables have been removed:
            <code class="literal">GLOBAL_VARIABLES</code>,
            <code class="literal">SESSION_VARIABLES</code>,
            <code class="literal">GLOBAL_STATUS</code>,
            <code class="literal">SESSION_STATUS</code>. Use the corresponding
            Performance Schema tables instead. See
            <a class="xref" href="performance-schema.html#performance-schema-system-variable-tables" title="25.11.13 Performance Schema System Variable Tables">Section 25.11.13, “Performance Schema System Variable Tables”</a>,
            and
            <a class="xref" href="performance-schema.html#performance-schema-status-variable-tables" title="25.11.14 Performance Schema Status Variable Tables">Section 25.11.14, “Performance Schema Status Variable Tables”</a>.
            In addition, the <code class="literal">show_compatibility_56</code>
            system variable has been removed. It was used in the
            transition period during which system and status variable
            information in <code class="literal">INFORMATION_SCHEMA</code> tables
            was moved to Performance Schema tables, and is no longer
            needed. These status variables have been removed:
            <code class="literal">Slave_heartbeat_period</code>,
            <code class="literal">Slave_last_heartbeat</code>,
            <code class="literal">Slave_received_heartbeats</code>,
            <code class="literal">Slave_retried_transactions</code>,
            <code class="literal">Slave_running</code>. The information they
            provided is available in Performance Schema tables; see
            <a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/performance-schema-variable-table-migration.html" target="_top">Migrating to Performance Schema System and Status Variable Tables</a>.
          </p></li><li class="listitem"><p>
            The Performance Schema <code class="literal">setup_timers</code> table
            has been removed, as has the <code class="literal">TICK</code> row in
            the <a class="link" href="performance-schema.html#performance-timers-table" title="25.11.16.2 The performance_timers Table"><code class="literal">performance_timers</code></a> table.
          </p></li><li class="listitem"><p>
            The <code class="literal">libmysqld</code> embedded server library has
            been removed, along with:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <a class="link" href="connectors-apis.html#mysql-options" title="27.7.7.50 mysql_options()"><code class="literal">mysql_options()</code></a>
                <code class="literal">MYSQL_OPT_GUESS_CONNECTION</code>,
                <code class="literal">MYSQL_OPT_USE_EMBEDDED_CONNECTION</code>,
                <code class="literal">MYSQL_OPT_USE_REMOTE_CONNECTION</code>, and
                <code class="literal">MYSQL_SET_CLIENT_IP</code> options
              </p></li><li class="listitem"><p>
                The <a class="link" href="programs.html#mysql-config" title="4.7.1 mysql_config — Display Options for Compiling Clients"><span class="command"><strong>mysql_config</strong></span></a>
                <code class="option">--libmysqld-libs</code>,
                <code class="option">--embedded-libs</code>, and
                <code class="option">--embedded</code> options
              </p></li><li class="listitem"><p>
                The <span class="command"><strong>CMake</strong></span>
                <code class="option">WITH_EMBEDDED_SERVER</code>,
                <code class="option">WITH_EMBEDDED_SHARED_LIBRARY</code>, and
                <code class="option">INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR</code>
                options
              </p></li><li class="listitem"><p>
                The (undocumented) <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Tool"><span class="command"><strong>mysql</strong></span></a>
                <code class="option">--server-arg</code> option
              </p></li><li class="listitem"><p>
                The <span class="command"><strong>mysqltest</strong></span>
                <code class="option">--embedded-server</code>,
                <code class="option">--server-arg</code>, and
                <code class="option">--server-file</code> options
              </p></li><li class="listitem"><p>
                The <span class="command"><strong>mysqltest_embedded</strong></span> and
                <span class="command"><strong>mysql_client_test_embedded</strong></span> test
                programs
</p></li></ul>
</div>
</li><li class="listitem"><p>
            The <span class="command"><strong>mysql_plugin</strong></span> utility has been
            removed. Alternatives include loading plugins at server
            startup using the
            <a class="link" href="server-administration.html#option_mysqld_plugin-load"><code class="option">--plugin-load</code></a> or
            <a class="link" href="server-administration.html#option_mysqld_plugin-load-add"><code class="option">--plugin-load-add</code></a> option, or
            at runtime using the <a class="link" href="sql-syntax.html#install-plugin" title="13.7.4.4 INSTALL PLUGIN Syntax"><code class="literal">INSTALL
            PLUGIN</code></a> statement.
          </p></li><li class="listitem"><p>
            The following server error codes are not used and have been
            removed. Applications that test specifically for any of
            these errors should be updated.
          </p><pre data-lang="none" class="programlisting">
ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE
ER_BINLOG_ROW_RBR_TO_SBR
ER_BINLOG_ROW_WRONG_TABLE_DEF
ER_CANT_ACTIVATE_LOG
ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION
ER_CANT_CREATE_FEDERATED_TABLE
ER_CANT_CREATE_SROUTINE
ER_CANT_DELETE_FILE
ER_CANT_GET_WD
ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF
ER_CANT_SET_WD
ER_CANT_WRITE_LOCK_LOG_TABLE
ER_CREATE_DB_WITH_READ_LOCK
ER_CYCLIC_REFERENCE
ER_DB_DROP_DELETE
ER_DELAYED_NOT_SUPPORTED
ER_DIFF_GROUPS_PROC
ER_DISK_FULL
ER_DROP_DB_WITH_READ_LOCK
ER_DROP_USER
ER_DUMP_NOT_IMPLEMENTED
ER_ERROR_DURING_CHECKPOINT
ER_ERROR_ON_CLOSE
ER_EVENTS_DB_ERROR
ER_EVENT_CANNOT_DELETE
ER_EVENT_CANT_ALTER
ER_EVENT_COMPILE_ERROR
ER_EVENT_DATA_TOO_LONG
ER_EVENT_DROP_FAILED
ER_EVENT_MODIFY_QUEUE_ERROR
ER_EVENT_NEITHER_M_EXPR_NOR_M_AT
ER_EVENT_OPEN_TABLE_FAILED
ER_EVENT_STORE_FAILED
ER_EXEC_STMT_WITH_OPEN_CURSOR
ER_FAILED_ROUTINE_BREAK_BINLOG
ER_FLUSH_MASTER_BINLOG_CLOSED
ER_FORM_NOT_FOUND
ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF__UNUSED
ER_FRM_UNKNOWN_TYPE
ER_GOT_SIGNAL
ER_GRANT_PLUGIN_USER_EXISTS
ER_GTID_MODE_REQUIRES_BINLOG
ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST
ER_HASHCHK
ER_INDEX_REBUILD
ER_INNODB_NO_FT_USES_PARSER
ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR
ER_LOAD_DATA_INVALID_COLUMN_UNUSED
ER_LOGGING_PROHIBIT_CHANGING_OF
ER_MALFORMED_DEFINER
ER_MASTER_KEY_ROTATION_ERROR_BY_SE
ER_NDB_CANT_SWITCH_BINLOG_FORMAT
ER_NEVER_USED
ER_NISAMCHK
ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR
ER_NO_FILE_MAPPING
ER_NO_GROUP_FOR_PROC
ER_NO_RAID_COMPILED
ER_NO_SUCH_KEY_VALUE
ER_NO_SUCH_PARTITION__UNUSED
ER_OBSOLETE_CANNOT_LOAD_FROM_TABLE
ER_OBSOLETE_COL_COUNT_DOESNT_MATCH_CORRUPTED
ER_ORDER_WITH_PROC
ER_PARTITION_SUBPARTITION_ERROR
ER_PARTITION_SUBPART_MIX_ERROR
ER_PART_STATE_ERROR
ER_PASSWD_LENGTH
ER_QUERY_ON_MASTER
ER_RBR_NOT_AVAILABLE
ER_SKIPPING_LOGGED_TRANSACTION
ER_SLAVE_CHANNEL_DELETE
ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT
ER_SLAVE_MUST_STOP
ER_SLAVE_WAS_NOT_RUNNING
ER_SLAVE_WAS_RUNNING
ER_SP_GOTO_IN_HNDLR
ER_SP_PROC_TABLE_CORRUPT
ER_SQL_MODE_NO_EFFECT
ER_SR_INVALID_CREATION_CTX
ER_TABLE_NEEDS_UPG_PART
ER_TOO_MUCH_AUTO_TIMESTAMP_COLS
ER_UNEXPECTED_EOF
ER_UNION_TABLES_IN_DIFFERENT_DIR
ER_UNSUPPORTED_BY_REPLICATION_THREAD
ER_UNUSED1
ER_UNUSED2
ER_UNUSED3
ER_UNUSED4
ER_UNUSED5
ER_UNUSED6
ER_VIEW_SELECT_DERIVED_UNUSED
ER_WRONG_MAGIC
ER_WSAS_FAILED
</pre></li><li class="listitem"><p>
            The deprecated <code class="literal">INFORMATION_SCHEMA</code>
            <a class="link" href="information-schema.html#innodb-locks-table" title="24.33.14 The INFORMATION_SCHEMA INNODB_LOCKS Table"><code class="literal">INNODB_LOCKS</code></a> and
            <a class="link" href="information-schema.html#innodb-lock-waits-table" title="24.33.15 The INFORMATION_SCHEMA INNODB_LOCK_WAITS Table"><code class="literal">INNODB_LOCK_WAITS</code></a> tables have
            been removed. Use the Performance Schema
            <a class="link" href="performance-schema.html#data-locks-table" title="25.11.12.1 The data_locks Table"><code class="literal">data_locks</code></a> and
            <a class="link" href="performance-schema.html#data-lock-waits-table" title="25.11.12.2 The data_lock_waits Table"><code class="literal">data_lock_waits</code></a> tables instead.
</p>
<div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">

<div class="admon-title">
Note
</div>
<p>
              In MySQL 5.7, the <code class="literal">LOCK_TABLE</code> column in
              the <a class="link" href="information-schema.html#innodb-locks-table" title="24.33.14 The INFORMATION_SCHEMA INNODB_LOCKS Table"><code class="literal">INNODB_LOCKS</code></a> table and
              the <code class="literal">locked_table</code> column in the
              <code class="literal">sys</code> schema
              <a class="link" href="sys-schema.html#sys-innodb-lock-waits" title="26.4.3.9 The innodb_lock_waits and x$innodb_lock_waits Views"><code class="literal">innodb_lock_waits</code></a> and
              <a class="link" href="sys-schema.html#sys-innodb-lock-waits" title="26.4.3.9 The innodb_lock_waits and x$innodb_lock_waits Views"><code class="literal">x$innodb_lock_waits</code></a> views
              contain combined schema/table name values. In MySQL 8.0,
              the <a class="link" href="performance-schema.html#data-locks-table" title="25.11.12.1 The data_locks Table"><code class="literal">data_locks</code></a> table and the
              <code class="literal">sys</code> schema views contain separate
              schema name and table name columns. See
              <a class="xref" href="sys-schema.html#sys-innodb-lock-waits" title="26.4.3.9 The innodb_lock_waits and x$innodb_lock_waits Views">Section 26.4.3.9, “The innodb_lock_waits and x$innodb_lock_waits Views”</a>.
</p>
</div>
</li><li class="listitem"><p>
            <code class="literal">InnoDB</code> no longer supports compressed
            temporary tables. When
            <a class="link" href="innodb-storage-engine.html#sysvar_innodb_strict_mode"><code class="literal">innodb_strict_mode</code></a> is
            enabled (the default),
            <a class="link" href="sql-syntax.html#create-table" title="13.1.18 CREATE TABLE Syntax"><code class="literal">CREATE
            TEMPORARY TABLE</code></a> returns an error if
            <code class="literal">ROW_FORMAT=COMPRESSED</code> or
            <code class="literal">KEY_BLOCK_SIZE</code> is specified. If
            <a class="link" href="innodb-storage-engine.html#sysvar_innodb_strict_mode"><code class="literal">innodb_strict_mode</code></a> is
            disabled, warnings are issued and the temporary table is
            created using a non-compressed row format.
          </p></li><li class="listitem"><p>
            <code class="literal">InnoDB</code> no longer creates
            <code class="filename">.isl</code> files (<code class="literal">InnoDB</code>
            Symbolic Link files) when creating tablespace data files
            outside of the MySQL data directory. The
            <a class="link" href="innodb-storage-engine.html#sysvar_innodb_directories"><code class="literal">innodb_directories</code></a> option
            now supports locating tablespace files created outside of
            the data directory.
          </p><p>
            With this change, moving a remote tablespace while the
            server is offline by manually modifying an
            <code class="filename">.isl</code> file is no longer supported.
            Moving remote tablespace files is now supported by the
            <a class="link" href="innodb-storage-engine.html#sysvar_innodb_directories"><code class="literal">innodb_directories</code></a> option.
            See <a class="xref" href="innodb-storage-engine.html#innodb-moving-data-files-offline" title="15.7.7 Moving Tablespace Files While the Server is Offline">Section 15.7.7, “Moving Tablespace Files While the Server is Offline”</a>.
          </p></li><li class="listitem"><p>
            The following <code class="literal">InnoDB</code> file format
            configuration options were removed:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                <code class="literal">innodb_file_format</code>
              </p></li><li class="listitem"><p>
                <code class="literal">innodb_file_format_check</code>
              </p></li><li class="listitem"><p>
                <code class="literal">innodb_file_format_max</code>
              </p></li><li class="listitem"><p>
                <code class="literal">innodb_large_prefix</code>
</p></li></ul>
</div>
<p>
            File format configuration options were necessary for
            creating tables compatible with earlier versions of
            <code class="literal">InnoDB</code> in MySQL 5.1. Now that MySQL 5.1
            has reached the end of its product lifecycle, these options
            are no longer required.
          </p><p>
            The <code class="literal">FILE_FORMAT</code> column was removed from
            the <a class="link" href="information-schema.html#innodb-tables-table" title="24.33.23 The INFORMATION_SCHEMA INNODB_TABLES Table"><code class="literal">INNODB_TABLES</code></a> and
            <a class="link" href="information-schema.html#innodb-tablespaces-table" title="24.33.24 The INFORMATION_SCHEMA INNODB_TABLESPACES Table"><code class="literal">INNODB_TABLESPACES</code></a> Information
            Schema tables.
          </p></li><li class="listitem"><p>
            The <code class="literal">innodb_support_xa</code> system variable,
            which enables support for two-phase commit in XA
            transactions, was removed. <code class="literal">InnoDB</code> support
            for two-phase commit in XA transactions is always enabled.
          </p></li><li class="listitem"><p>
            Support for DTrace has been removed.
          </p></li><li class="listitem"><p>
            The <code class="literal">JSON_APPEND()</code> function has been
            removed. Use
            <a class="link" href="functions.html#function_json-array-append"><code class="literal">JSON_ARRAY_APPEND()</code></a> instead.
</p></li></ul>
</div>

</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="added-deprecated-removed"></a>1.5 Server and Status Variables and Options Added, Deprecated, or Removed in
MySQL 8.0</h2>
</div>
</div>
</div>
<p>
    This section lists server variables, status variables, and options
    that were added for the first time, have been deprecated, or have
    been removed in MySQL 8.0.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        <a class="xref" href="introduction.html#optvars-added" title="Options and Variables Introduced in MySQL 8.0">Options and Variables Introduced in MySQL 8.0</a>
      </p></li><li class="listitem"><p>
        <a class="xref" href="introduction.html#optvars-deprecated" title="Options and Variables Deprecated in MySQL 8.0">Options and Variables Deprecated in MySQL 8.0</a>
      </p></li><li class="listitem"><p>
        <a class="xref" href="introduction.html#optvars-removed" title="Options and Variables Removed in MySQL 8.0">Options and Variables Removed in MySQL 8.0</a>
</p></li></ul>
</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="optvars-added"></a>Options and Variables Introduced in MySQL 8.0</h3>

</div>

</div>

</div>
<p>
      The following system variables, status variables, and options are
      new in MySQL 8.0, and have not been included in any previous
      release series.
</p>
<div class="itemizedlist">
<a name="optvars-added-list"></a><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Acl_cache_items_count">Acl_cache_items_count</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_current_size">Audit_log_current_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_event_max_drop_size">Audit_log_event_max_drop_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_events">Audit_log_events</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_events_filtered">Audit_log_events_filtered</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_events_lost">Audit_log_events_lost</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_events_written">Audit_log_events_written</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_total_size">Audit_log_total_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Audit_log_write_waits">Audit_log_write_waits</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Caching_sha2_password_rsa_public_key">Caching_sha2_password_rsa_public_key</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_alter_resource_group</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_alter_user_default_role</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_create_resource_group</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_create_role</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_drop_resource_group</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_drop_role</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_grant_roles</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_install_component</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_revoke_roles</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_set_resource_group</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_set_role</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_uninstall_component</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Connection_control_delay_generated">Connection_control_delay_generated</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Firewall_access_denied">Firewall_access_denied</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Firewall_access_granted">Firewall_access_granted</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_Firewall_cached_entries">Firewall_cached_entries</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_activate_all_roles_on_login">activate_all_roles_on_login</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_audit-log">audit-log</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_buffer_size">audit_log_buffer_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_compression">audit_log_compression</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_connection_policy">audit_log_connection_policy</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_current_session">audit_log_current_session</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_encryption">audit_log_encryption</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_exclude_accounts">audit_log_exclude_accounts</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_file">audit_log_file</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_filter_id">audit_log_filter_id</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_flush">audit_log_flush</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_format">audit_log_format</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_include_accounts">audit_log_include_accounts</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_policy">audit_log_policy</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_read_buffer_size">audit_log_read_buffer_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_rotate_on_size">audit_log_rotate_on_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_statement_policy">audit_log_statement_policy</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_audit_log_strategy">audit_log_strategy</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_auth_method_name">authentication_ldap_sasl_auth_method_name</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_bind_base_dn">authentication_ldap_sasl_bind_base_dn</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_bind_root_dn">authentication_ldap_sasl_bind_root_dn</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_bind_root_pwd">authentication_ldap_sasl_bind_root_pwd</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_ca_path">authentication_ldap_sasl_ca_path</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_group_search_attr">authentication_ldap_sasl_group_search_attr</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_group_search_filter">authentication_ldap_sasl_group_search_filter</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_init_pool_size">authentication_ldap_sasl_init_pool_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_log_status">authentication_ldap_sasl_log_status</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_max_pool_size">authentication_ldap_sasl_max_pool_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_server_host">authentication_ldap_sasl_server_host</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_server_port">authentication_ldap_sasl_server_port</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_tls">authentication_ldap_sasl_tls</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_sasl_user_search_attr">authentication_ldap_sasl_user_search_attr</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_auth_method_name">authentication_ldap_simple_auth_method_name</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_bind_base_dn">authentication_ldap_simple_bind_base_dn</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_bind_root_dn">authentication_ldap_simple_bind_root_dn</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_bind_root_pwd">authentication_ldap_simple_bind_root_pwd</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_ca_path">authentication_ldap_simple_ca_path</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_group_search_attr">authentication_ldap_simple_group_search_attr</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_group_search_filter">authentication_ldap_simple_group_search_filter</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_init_pool_size">authentication_ldap_simple_init_pool_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_log_status">authentication_ldap_simple_log_status</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_max_pool_size">authentication_ldap_simple_max_pool_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_server_host">authentication_ldap_simple_server_host</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_server_port">authentication_ldap_simple_server_port</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_tls">authentication_ldap_simple_tls</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_authentication_ldap_simple_user_search_attr">authentication_ldap_simple_user_search_attr</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_authentication_windows_log_level">authentication_windows_log_level</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_authentication_windows_use_principal_name">authentication_windows_use_principal_name</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_binlog_expire_logs_seconds">binlog_expire_logs_seconds</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_row_metadata">binlog_row_metadata</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_row_value_options">binlog_row_value_options</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_transaction_dependency_history_size">binlog_transaction_dependency_history_size</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_binlog_transaction_dependency_tracking">binlog_transaction_dependency_tracking</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_caching_sha2_password_auto_generate_rsa_keys">caching_sha2_password_auto_generate_rsa_keys</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_caching_sha2_password_private_key_path">caching_sha2_password_private_key_path</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_caching_sha2_password_public_key_path">caching_sha2_password_public_key_path</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_connection_control_failed_connections_threshold">connection_control_failed_connections_threshold</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_connection_control_max_connection_delay">connection_control_max_connection_delay</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_connection_control_min_connection_delay">connection_control_min_connection_delay</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_cte_max_recursion_depth">cte_max_recursion_depth</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_default_collation_for_utf8mb4">default_collation_for_utf8mb4</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_dragnet.log_error_filter_rules">dragnet.log_error_filter_rules</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_early-plugin-load">early-plugin-load</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_communication_debug_options">group_replication_communication_debug_options</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_hold_percent">group_replication_flow_control_hold_percent</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_max_commit_quota">group_replication_flow_control_max_commit_quota</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_member_quota_percent">group_replication_flow_control_member_quota_percent</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_min_quota">group_replication_flow_control_min_quota</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_min_recovery_quota">group_replication_flow_control_min_recovery_quota</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_period">group_replication_flow_control_period</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_flow_control_release_percent">group_replication_flow_control_release_percent</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_member_weight">group_replication_member_weight</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_get_public_key">group_replication_recovery_get_public_key</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_recovery_public_key_path">group_replication_recovery_public_key_path</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_unreachable_majority_timeout">group_replication_unreachable_majority_timeout</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_histogram_generation_max_mem_size">histogram_generation_max_mem_size</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_information_schema_stats_expiry">information_schema_stats_expiry</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_buffer_pool_debug">innodb_buffer_pool_debug</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_checkpoint_disabled">innodb_checkpoint_disabled</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_ddl_log_crash_reset_debug">innodb_ddl_log_crash_reset_debug</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_deadlock_detect">innodb_deadlock_detect</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_dedicated_server">innodb_dedicated_server</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_directories">innodb_directories</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_spin_cpu_abs_lwm">innodb_log_spin_cpu_abs_lwm</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_spin_cpu_pct_hwm">innodb_log_spin_cpu_pct_hwm</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_log_wait_for_flush_spin_hwm">innodb_log_wait_for_flush_spin_hwm</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_print_ddl_logs">innodb_print_ddl_logs</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_redo_log_encrypt">innodb_redo_log_encrypt</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_scan_directories">innodb_scan_directories</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_stats_include_delete_marked">innodb_stats_include_delete_marked</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_tmpdir">innodb_tmpdir</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_log_encrypt">innodb_undo_log_encrypt</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_internal_tmp_mem_storage_engine">internal_tmp_mem_storage_engine</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-destination">keyring-migration-destination</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-host">keyring-migration-host</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-password">keyring-migration-password</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-port">keyring-migration-port</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-socket">keyring-migration-socket</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-source">keyring-migration-source</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#option_mysqld_keyring-migration-user">keyring-migration-user</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_aws_cmk_id">keyring_aws_cmk_id</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_aws_conf_file">keyring_aws_conf_file</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_aws_data_file">keyring_aws_data_file</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_aws_region">keyring_aws_region</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_encrypted_file_data">keyring_encrypted_file_data</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_encrypted_file_password">keyring_encrypted_file_password</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_okv_conf_dir">keyring_okv_conf_dir</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_keyring_operations">keyring_operations</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_error_filter_rules">log_error_filter_rules</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_error_services">log_error_services</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_mandatory_roles">mandatory_roles</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_mysql_firewall_mode">mysql_firewall_mode</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_mysql_firewall_trace">mysql_firewall_trace</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#option_mysqld_mysqlx-interactive-timeout">mysqlx-interactive-timeout</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#option_mysqld_mysqlx-read-timeout">mysqlx-port-read-timeout</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#option_mysqld_mysqlx-wait-timeout">mysqlx-wait-timeout</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#option_mysqld_mysqlx-write-timeout">mysqlx-write-timeout</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_interactive_timeout">mysqlx_interactive_timeout</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_read_timeout">mysqlx_read_timeout</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_wait_timeout">mysqlx_wait_timeout</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="document-store.html#sysvar_mysqlx_write_timeout">mysqlx_write_timeout</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_no-dd-upgrade">no-dd-upgrade</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_no-monitor">no-monitor</a></code>:
          Added in MySQL 8.0.12.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_original_commit_timestamp">original_commit_timestamp</a></code>:
          Added in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_password_history">password_history</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_password_reuse_interval">password_reuse_interval</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="performance-schema.html#sysvar_performance_schema_max_digest_sample_age">performance_schema_max_digest_sample_age</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_persisted_globals_load">persisted_globals_load</a></code>:
          Added in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_regexp_stack_limit">regexp_stack_limit</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_regexp_time_limit">regexp_time_limit</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_resultset_metadata">resultset_metadata</a></code>:
          Added in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="replication.html#sysvar_rpl_read_size">rpl_read_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_show_create_table_verbosity">show_create_table_verbosity</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_ssl_fips_mode">ssl_fips_mode</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_temptable_max_ram">temptable_max_ram</a></code>:
          Added in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_algorithm">thread_pool_algorithm</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_high_priority_connection">thread_pool_high_priority_connection</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_max_unused_threads">thread_pool_max_unused_threads</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_prio_kickup_timer">thread_pool_prio_kickup_timer</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_size">thread_pool_size</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_thread_pool_stall_limit">thread_pool_stall_limit</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_validate_password.check_user_name">validate_password.check_user_name</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_validate_password.dictionary_file">validate_password.dictionary_file</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_validate_password.dictionary_file_last_parsed">validate_password.dictionary_file_last_parsed</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#statvar_validate_password.dictionary_file_words_count">validate_password.dictionary_file_words_count</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_validate_password.length">validate_password.length</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_validate_password.mixed_case_count">validate_password.mixed_case_count</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_validate_password.number_count">validate_password.number_count</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_validate_password.policy">validate_password.policy</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="security.html#sysvar_validate_password.special_char_count">validate_password.special_char_count</a></code>:
          Added in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_version_compile_zlib">version_compile_zlib</a></code>:
          Added in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_windowing_use_high_precision">windowing_use_high_precision</a></code>:
          Added in MySQL 8.0.2.
</p></li></ul>
</div>

</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="optvars-deprecated"></a>Options and Variables Deprecated in MySQL 8.0</h3>

</div>

</div>

</div>
<p>
      The following system variables, status variables, and options have
      been deprecated in MySQL 8.0.
</p>
<div class="itemizedlist">
<a name="optvars-deprecated-list"></a><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_expire_logs_days">expire_logs_days</a></code>:
          Purge binary logs after this many days. Deprecated as of MySQL
          8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_tablespaces">innodb_undo_tablespaces</a></code>:
          The number of tablespace files that rollback segments are
          divided between. Deprecated as of MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_syslog">log_syslog</a></code>:
          Whether to write error log to syslog. Deprecated as of MySQL
          8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_symbolic-links">symbolic-links</a></code>:
          Permit symbolic links for MyISAM tables. Deprecated as of
          MySQL 8.0.2.
</p></li></ul>
</div>

</div>
<div class="simplesect">
<div class="titlepage">
<div>
<div class="simple">
<h3 class="title"><a name="optvars-removed"></a>Options and Variables Removed in MySQL 8.0</h3>

</div>

</div>

</div>
<p>
      The following system variables, status variables, and options have
      been removed in MySQL 8.0.
</p>
<div class="itemizedlist">
<a name="optvars-removed-list"></a><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Com_xxx">Com_alter_db_upgrade</a></code>:
          Count of ALTER DATABASE ... UPGRADE DATA DIRECTORY NAME
          statements. Removed in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Innodb_available_undo_logs">Innodb_available_undo_logs</a></code>:
          Display the total number of InnoDB rollback segments;
          different from innodb_rollback_segments, which displays the
          number of active rollback segments. Removed in MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_free_blocks">Qcache_free_blocks</a></code>:
          Number of free memory blocks in the query cache. Removed in
          MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_free_memory">Qcache_free_memory</a></code>:
          The amount of free memory for the query cache. Removed in
          MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_hits">Qcache_hits</a></code>:
          Number of query cache hits. Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_inserts">Qcache_inserts</a></code>:
          Number of query cache inserts. Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_lowmem_prunes">Qcache_lowmem_prunes</a></code>:
          Number of queries that were deleted from the query cache due
          to lack of free memory in the cache. Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_not_cached">Qcache_not_cached</a></code>:
          Number of noncached queries (not cacheable, or not cached due
          to the query_cache_type setting). Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_queries_in_cache">Qcache_queries_in_cache</a></code>:
          Number of queries registered in the query cache. Removed in
          MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Qcache_total_blocks">Qcache_total_blocks</a></code>:
          The total number of blocks in the query cache. Removed in
          MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_heartbeat_period">Slave_heartbeat_period</a></code>:
          The slave's replication heartbeat interval, in seconds.
          Removed in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_last_heartbeat">Slave_last_heartbeat</a></code>:
          Shows when the latest heartbeat signal was received, in
          TIMESTAMP format. Removed in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_received_heartbeats">Slave_received_heartbeats</a></code>:
          Number of heartbeats received by a replication slave since
          previous reset. Removed in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_retried_transactions">Slave_retried_transactions</a></code>:
          The total number of times since startup that the replication
          slave SQL thread has retried transactions. Removed in MySQL
          8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#statvar_Slave_running">Slave_running</a></code>:
          The state of this server as a replication slave (slave I/O
          thread status). Removed in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_bootstrap" target="_top">bootstrap</a></code>:
          Used by mysql installation scripts. Removed in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_date_format">date_format</a></code>:
          The DATE format (unused). Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_datetime_format">datetime_format</a></code>:
          The DATETIME/TIMESTAMP format (unused). Removed in MySQL
          8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_des-key-file">des-key-file</a></code>:
          Load keys for des_encrypt() and des_encrypt from given file.
          Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="group-replication.html#sysvar_group_replication_allow_local_disjoint_gtids_join">group_replication_allow_local_disjoint_gtids_join</a></code>:
          Allow the current server to join the group even if it has
          transactions not present in the group. Removed in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_have_crypt">have_crypt</a></code>:
          Availability of the crypt() system call. Removed in MySQL
          8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#option_mysqld_ignore-builtin-innodb">ignore-builtin-innodb</a></code>:
          Ignore the built-in InnoDB. Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_ignore-db-dir" target="_top">ignore-db-dir</a></code>:
          Treat directory as nondatabase directory. Removed in MySQL
          8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_ignore_db_dirs" target="_top">ignore_db_dirs</a></code>:
          Directories treated as nondatabase directories. Removed in
          MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_checksums" target="_top">innodb_checksums</a></code>:
          Enable InnoDB checksums validation. Removed in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_disable_resize_buffer_pool_debug" target="_top">innodb_disable_resize_buffer_pool_debug</a></code>:
          Disables resizing of the InnoDB buffer pool. Removed in MySQL
          8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_format" target="_top">innodb_file_format</a></code>:
          The format for new InnoDB tables. Removed in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_format_check" target="_top">innodb_file_format_check</a></code>:
          Whether InnoDB performs file format compatibility checking.
          Removed in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_format_max" target="_top">innodb_file_format_max</a></code>:
          The file format tag in the shared tablespace. Removed in MySQL
          8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_large_prefix" target="_top">innodb_large_prefix</a></code>:
          Enables longer keys for column prefix indexes. Removed in
          MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_locks_unsafe_for_binlog" target="_top">innodb_locks_unsafe_for_binlog</a></code>:
          Force InnoDB not to use next-key locking. Instead use only
          row-level locking. Removed in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_stats_sample_pages" target="_top">innodb_stats_sample_pages</a></code>:
          Number of index pages to sample for index distribution
          statistics. Removed in MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_support_xa" target="_top">innodb_support_xa</a></code>:
          Enable InnoDB support for the XA two-phase commit. Removed in
          MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="innodb-storage-engine.html#sysvar_innodb_undo_logs">innodb_undo_logs</a></code>:
          Defines the number of undo logs (rollback segments) used by
          InnoDB; an alias for innodb_rollback_segments. Removed in
          MySQL 8.0.2.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_log-warnings">log-warnings</a></code>:
          Log some noncritical warnings to the log file. Removed in
          MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_builtin_as_identified_by_password">log_builtin_as_identified_by_password</a></code>:
          Whether to log CREATE/ALTER USER, GRANT in backward-compatible
          fashion. Removed in MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_log_error_filter_rules">log_error_filter_rules</a></code>:
          Filter rules for error logging. Removed in MySQL 8.0.4.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_max_tmp_tables">max_tmp_tables</a></code>:
          Unused. Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_multi_range_count">multi_range_count</a></code>:
          The maximum number of ranges to send to a table handler at
          once during range selects. Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_old_passwords">old_passwords</a></code>:
          Selects password hashing method for PASSWORD(). Removed in
          MySQL 8.0.11.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_partition" target="_top">partition</a></code>:
          Enable (or disable) partitioning support. Removed in MySQL
          8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_limit">query_cache_limit</a></code>:
          Do not cache results that are bigger than this. Removed in
          MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_min_res_unit">query_cache_min_res_unit</a></code>:
          Minimal size of unit in which space for results is allocated
          (last unit will be trimmed after writing all result data).
          Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_size">query_cache_size</a></code>:
          The memory allocated to store results from old queries.
          Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_type">query_cache_type</a></code>:
          Query cache type. Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_query_cache_wlock_invalidate">query_cache_wlock_invalidate</a></code>:
          Invalidate queries in query cache on LOCK for write. Removed
          in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_secure-auth">secure-auth</a></code>:
          Disallow authentication for accounts that have old (pre-4.1)
          passwords. Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_show_compatibility_56">show_compatibility_56</a></code>:
          Compatibility for SHOW STATUS/VARIABLES. Removed in MySQL
          8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_skip-partition" target="_top">skip-partition</a></code>:
          Do not enable user-defined partitioning. Removed in MySQL
          8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sync_frm" target="_top">sync_frm</a></code>:
          Sync .frm to disk on create. Enabled by default. Removed in
          MySQL 8.0.0.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#option_mysqld_temp-pool">temp-pool</a></code>:
          Using this option will cause most temporary files created to
          use a small set of names, rather than a unique name for each
          new file. Removed in MySQL 8.0.1.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_time_format">time_format</a></code>:
          The TIME format (unused). Removed in MySQL 8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_tx_isolation">tx_isolation</a></code>:
          The default transaction isolation level. Removed in MySQL
          8.0.3.
        </p></li><li class="listitem"><p>
          <code class="literal"><a class="link" href="server-administration.html#sysvar_tx_read_only">tx_read_only</a></code>:
          Default transaction access mode. Removed in MySQL 8.0.3.
</p></li></ul>
</div>

</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="information-sources"></a>1.6 MySQL Information Sources</h2>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#mysql-web-sites">1.6.1 MySQL Websites</a></span></dt><dt><span class="section"><a href="introduction.html#mailing-lists">1.6.2 MySQL Mailing Lists</a></span></dt><dt><span class="section"><a href="introduction.html#forums">1.6.3 MySQL Community Support at the MySQL Forums</a></span></dt><dt><span class="section"><a href="introduction.html#irc">1.6.4 MySQL Community Support on Internet Relay Chat (IRC)</a></span></dt><dt><span class="section"><a href="introduction.html#mysql-enterprise-information">1.6.5 MySQL Enterprise</a></span></dt></dl>
</div>
<p>
    This section lists sources of additional information that you may
    find helpful, such as MySQL websites, mailing lists, user forums,
    and Internet Relay Chat.
</p>
<div class="section">

<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="mysql-web-sites"></a>1.6.1 MySQL Websites</h3>
</div>
</div>
</div>
<a class="indexterm" name="idm139899661546672"></a><a class="indexterm" name="idm139899661545184"></a><p>
      The primary website for MySQL documentation is
      <a class="ulink" href="http://dev.mysql.com/doc/" target="_top">http://dev.mysql.com/doc/</a>. Online and downloadable
      documentation formats are available for the MySQL Reference
      Manual, MySQL Connectors, and more.
    </p><p>
      The MySQL developers provide information about new and upcoming
      features as the <a class="ulink" href="http://mysqlserverteam.com/" target="_top">MySQL
      Server Blog</a>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="mailing-lists"></a>1.6.2 MySQL Mailing Lists</h3>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#mailing-list-use">1.6.2.1 Guidelines for Using the Mailing Lists</a></span></dt></dl>
</div>
<a class="indexterm" name="idm139899661540128"></a><a class="indexterm" name="idm139899661539056"></a><a class="indexterm" name="idm139899661537984"></a><a class="indexterm" name="idm139899661536912"></a><p>
      This section introduces the MySQL mailing lists and provides
      guidelines as to how the lists should be used. When you subscribe
      to a mailing list, you receive all postings to the list as email
      messages. You can also send your own questions and answers to the
      list.
    </p><p>
      To subscribe to or unsubscribe from any of the mailing lists
      described in this section, visit
      <a class="ulink" href="http://lists.mysql.com/" target="_top">http://lists.mysql.com/</a>. For most of them, you can
      select the regular version of the list where you get individual
      messages, or a digest version where you get one large message per
      day.
    </p><p>
      Please <span class="emphasis"><em>do not</em></span> send messages about subscribing
      or unsubscribing to any of the mailing lists, because such
      messages are distributed automatically to thousands of other
      users.
    </p><p>
      Your local site may have many subscribers to a MySQL mailing list.
      If so, the site may have a local mailing list, so that messages
      sent from <code class="literal">lists.mysql.com</code> to your site are
      propagated to the local list. In such cases, please contact your
      system administrator to be added to or dropped from the local
      MySQL list.
    </p><p>
      To have traffic for a mailing list go to a separate mailbox in
      your mail program, set up a filter based on the message headers.
      You can use either the <code class="literal">List-ID:</code> or
      <code class="literal">Delivered-To:</code> headers to identify list
      messages.
    </p><p>
      The MySQL mailing lists are as follows:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal">announce</code>
        </p><p>
          The list for announcements of new versions of MySQL and
          related programs. This is a low-volume list to which all MySQL
          users should subscribe.
        </p></li><li class="listitem"><p>
          <code class="literal">mysql</code>
        </p><p>
          The main list for general MySQL discussion. Please note that
          some topics are better discussed on the more-specialized
          lists. If you post to the wrong list, you may not get an
          answer.
        </p></li><li class="listitem"><p>
          <code class="literal">bugs</code>
        </p><p>
          The list for people who want to stay informed about issues
          reported since the last release of MySQL or who want to be
          actively involved in the process of bug hunting and fixing.
          See <a class="xref" href="introduction.html#bug-reports" title="1.7 How to Report Bugs or Problems">Section 1.7, “How to Report Bugs or Problems”</a>.
        </p></li><li class="listitem"><p>
          <code class="literal">internals</code>
        </p><p>
          The list for people who work on the MySQL code. This is also
          the forum for discussions on MySQL development and for posting
          patches.
        </p></li><li class="listitem"><p>
          <code class="literal">mysqldoc</code>
        </p><p>
          The list for people who work on the MySQL documentation.
        </p></li><li class="listitem"><p>
          <code class="literal">benchmarks</code>
        </p><p>
          The list for anyone interested in performance issues.
          Discussions concentrate on database performance (not limited
          to MySQL), but also include broader categories such as
          performance of the kernel, file system, disk system, and so
          on.
        </p></li><li class="listitem"><p>
          <code class="literal">packagers</code>
        </p><p>
          The list for discussions on packaging and distributing MySQL.
          This is the forum used by distribution maintainers to exchange
          ideas on packaging MySQL and on ensuring that MySQL looks and
          feels as similar as possible on all supported platforms and
          operating systems.
        </p></li><li class="listitem"><p>
          <code class="literal">java</code>
        </p><p>
          The list for discussions about the MySQL server and Java. It
          is mostly used to discuss JDBC drivers such as MySQL
          Connector/J.
        </p></li><li class="listitem"><p>
          <code class="literal">win32</code>
        </p><p>
          The list for all topics concerning the MySQL software on
          Microsoft operating systems, such as Windows 9x, Me, NT, 2000,
          XP, and 2003.
        </p></li><li class="listitem"><p>
          <code class="literal">myodbc</code>
        </p><p>
          The list for all topics concerning connecting to the MySQL
          server with ODBC.
        </p></li><li class="listitem"><p>
          <code class="literal">gui-tools</code>
        </p><p>
          The list for all topics concerning MySQL graphical user
          interface tools such as MySQL Workbench.
        </p></li><li class="listitem"><p>
          <code class="literal">cluster</code>
        </p><p>
          The list for discussion of MySQL Cluster.
        </p></li><li class="listitem"><p>
          <code class="literal">dotnet</code>
        </p><p>
          The list for discussion of the MySQL server and the .NET
          platform. It is mostly related to MySQL Connector/Net.
        </p></li><li class="listitem"><p>
          <code class="literal">plusplus</code>
        </p><p>
          The list for all topics concerning programming with the C++
          API for MySQL.
        </p></li><li class="listitem"><p>
          <code class="literal">perl</code>
        </p><p>
          The list for all topics concerning Perl support for MySQL with
          <code class="literal">DBD::mysql</code>.
</p></li></ul>
</div>
<p>
      If you're unable to get an answer to your questions from a MySQL
      mailing list or forum, one option is to purchase support from
      Oracle. This puts you in direct contact with MySQL developers.
    </p><p>
      The following MySQL mailing lists are in languages other than
      English. These lists are not operated by Oracle.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal"><code class="email">&lt;<a class="email" href="mailto:mysql-france-subscribe@yahoogroups.com">mysql-france-subscribe@yahoogroups.com</a>&gt;</code></code>
        </p><p>
          A French mailing list.
        </p></li><li class="listitem"><p>
          <code class="literal"><code class="email">&lt;<a class="email" href="mailto:list@tinc.net">list@tinc.net</a>&gt;</code></code>
        </p><p>
          A Korean mailing list. To subscribe, email <code class="literal">subscribe
          mysql your@email.address</code> to this list.
        </p></li><li class="listitem"><p>
          <code class="literal"><code class="email">&lt;<a class="email" href="mailto:mysql-de-request@lists.4t2.com">mysql-de-request@lists.4t2.com</a>&gt;</code></code>
        </p><p>
          A German mailing list. To subscribe, email <code class="literal">subscribe
          mysql-de your@email.address</code> to this list. You can
          find information about this mailing list at
          <a class="ulink" href="http://www.4t2.com/mysql/" target="_top">http://www.4t2.com/mysql/</a>.
        </p></li><li class="listitem"><p>
          <code class="literal"><code class="email">&lt;<a class="email" href="mailto:mysql-br-request@listas.linkway.com.br">mysql-br-request@listas.linkway.com.br</a>&gt;</code></code>
        </p><p>
          A Portuguese mailing list. To subscribe, email
          <code class="literal">subscribe mysql-br your@email.address</code> to
          this list.
        </p></li><li class="listitem"><p>
          <code class="literal"><code class="email">&lt;<a class="email" href="mailto:mysql-alta@elistas.net">mysql-alta@elistas.net</a>&gt;</code></code>
        </p><p>
          A Spanish mailing list. To subscribe, email <code class="literal">subscribe
          mysql your@email.address</code> to this list.
</p></li></ul>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="mailing-list-use"></a>1.6.2.1 Guidelines for Using the Mailing Lists</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139899661479888"></a><a class="indexterm" name="idm139899661478848"></a><a class="indexterm" name="idm139899661477360"></a><a class="indexterm" name="idm139899661475872"></a><p>
        Please do not post mail messages from your browser with HTML
        mode turned on. Many users do not read mail with a browser.
      </p><p>
        When you answer a question sent to a mailing list, if you
        consider your answer to have broad interest, you may want to
        post it to the list instead of replying directly to the
        individual who asked. Try to make your answer general enough
        that people other than the original poster may benefit from it.
        When you post to the list, please make sure that your answer is
        not a duplication of a previous answer.
      </p><p>
        Try to summarize the essential part of the question in your
        reply. Do not feel obliged to quote the entire original message.
      </p><p>
        When answers are sent to you individually and not to the mailing
        list, it is considered good etiquette to summarize the answers
        and send the summary to the mailing list so that others may have
        the benefit of responses you received that helped you solve your
        problem.
</p>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="forums"></a>1.6.3 MySQL Community Support at the MySQL Forums</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm139899661470352"></a><a class="indexterm" name="idm139899661468896"></a><p>
      The forums at <a class="ulink" href="http://forums.mysql.com" target="_top">http://forums.mysql.com</a> are an
      important community resource. Many forums are available, grouped
      into these general categories:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Migration
        </p></li><li class="listitem"><p>
          MySQL Usage
        </p></li><li class="listitem"><p>
          MySQL Connectors
        </p></li><li class="listitem"><p>
          Programming Languages
        </p></li><li class="listitem"><p>
          Tools
        </p></li><li class="listitem"><p>
          3rd-Party Applications
        </p></li><li class="listitem"><p>
          Storage Engines
        </p></li><li class="listitem"><p>
          MySQL Technology
        </p></li><li class="listitem"><p>
          SQL Standards
        </p></li><li class="listitem"><p>
          Business
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="irc"></a>1.6.4 MySQL Community Support on Internet Relay Chat (IRC)</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm139899661456912"></a><a class="indexterm" name="idm139899661455856"></a><p>
      In addition to the various MySQL mailing lists and forums, you can
      find experienced community people on Internet Relay Chat (IRC).
      These are the best networks/channels currently known to us:
    </p><p>
      <span class="bold"><strong>freenode</strong></span> (see
      <a class="ulink" href="http://www.freenode.net/" target="_top">http://www.freenode.net/</a> for servers)
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          <code class="literal">#mysql</code> is primarily for MySQL questions,
          but other database and general SQL questions are welcome.
          Questions about PHP, Perl, or C in combination with MySQL are
          also common.
        </p></li><li class="listitem"><p>
          <code class="literal">#workbench</code> is primarily for MySQL Workbench
          related questions and thoughts, and it is also a good place to
          meet the MySQL Workbench developers.
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="mysql-enterprise-information"></a>1.6.5 MySQL Enterprise</h3>

</div>

</div>

</div>
<p>
      Oracle offers technical support in the form of MySQL Enterprise.
      For organizations that rely on the MySQL DBMS for
      business-critical production applications, MySQL Enterprise is a
      commercial subscription offering which includes:

</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            MySQL Enterprise Server
          </p></li><li class="listitem"><p>
            MySQL Enterprise Monitor
          </p></li><li class="listitem"><p>
            Monthly Rapid Updates and Quarterly Service Packs
          </p></li><li class="listitem"><p>
            MySQL Knowledge Base
          </p></li><li class="listitem"><p>
            24x7 Technical and Consultative Support
</p></li></ul>
</div>
<p>

      MySQL Enterprise is available in multiple tiers, giving you the
      flexibility to choose the level of service that best matches your
      needs. For more information, see
      <a class="ulink" href="http://www.mysql.com/products/enterprise/" target="_top">MySQL Enterprise</a>.
</p>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="bug-reports"></a>1.7 How to Report Bugs or Problems</h2>

</div>

</div>

</div>
<a class="indexterm" name="idm139899661439600"></a><a class="indexterm" name="idm139899661438176"></a><a class="indexterm" name="idm139899661436688"></a><a class="indexterm" name="idm139899661435200"></a><a class="indexterm" name="idm139899661433712"></a><a class="indexterm" name="idm139899661432224"></a><a class="indexterm" name="idm139899661430736"></a><a class="indexterm" name="idm139899661429248"></a><a class="indexterm" name="idm139899661427760"></a><a class="indexterm" name="idm139899661426688"></a><p>
    Before posting a bug report about a problem, please try to verify
    that it is a bug and that it has not been reported already:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        Start by searching the MySQL online manual at
        <a class="ulink" href="http://dev.mysql.com/doc/" target="_top">http://dev.mysql.com/doc/</a>. We try to keep the manual up to
        date by updating it frequently with solutions to newly found
        problems. In addition, the release notes accompanying the manual
        can be particularly useful since it is quite possible that a
        newer version contains a solution to your problem. The release
        notes are available at the location just given for the manual.
      </p></li><li class="listitem"><p>
        If you get a parse error for an SQL statement, please check your
        syntax closely. If you cannot find something wrong with it, it
        is extremely likely that your current version of MySQL Server
        doesn't support the syntax you are using. If you are using the
        current version and the manual doesn't cover the syntax that you
        are using, MySQL Server doesn't support your statement.
      </p><p>
        If the manual covers the syntax you are using, but you have an
        older version of MySQL Server, you should check the MySQL change
        history to see when the syntax was implemented. In this case,
        you have the option of upgrading to a newer version of MySQL
        Server.
      </p></li><li class="listitem"><p>
        For solutions to some common problems, see
        <a class="xref" href="error-handling.html#problems" title="B.5 Problems and Common Errors">Section B.5, “Problems and Common Errors”</a>.
      </p></li><li class="listitem"><p>
        Search the bugs database at
        <a class="ulink" href="http://bugs.mysql.com/" target="_top">http://bugs.mysql.com/</a> to see whether the bug has
        been reported and fixed.
      </p></li><li class="listitem"><p>
        Search the MySQL mailing list archives at
        <a class="ulink" href="http://lists.mysql.com/" target="_top">http://lists.mysql.com/</a>. See
        <a class="xref" href="introduction.html#mailing-lists" title="1.6.2 MySQL Mailing Lists">Section 1.6.2, “MySQL Mailing Lists”</a>.
      </p></li><li class="listitem"><p>
        You can also use <a class="ulink" href="http://www.mysql.com/search/" target="_top">http://www.mysql.com/search/</a> to
        search all the Web pages (including the manual) that are located
        at the MySQL website.
</p></li></ul>
</div>
<p>
    If you cannot find an answer in the manual, the bugs database, or
    the mailing list archives, check with your local MySQL expert. If
    you still cannot find an answer to your question, please use the
    following guidelines for reporting the bug.
  </p><p>
    The normal way to report bugs is to visit
    <a class="ulink" href="http://bugs.mysql.com/" target="_top">http://bugs.mysql.com/</a>, which is the address for our
    bugs database. This database is public and can be browsed and
    searched by anyone. If you log in to the system, you can enter new
    reports.
  </p><p>
    Bugs posted in the bugs database at
    <a class="ulink" href="http://bugs.mysql.com/" target="_top">http://bugs.mysql.com/</a> that are corrected for a given
    release are noted in the release notes.
  </p><p>
    If you find a sensitive security bug in MySQL Server, please let us
    know immediately by sending an email message to
    <code class="email">&lt;<a class="email" href="mailto:secalert_us@oracle.com">secalert_us@oracle.com</a>&gt;</code>. Exception: Support customers
    should report all problems, including security bugs, to Oracle
    Support at <a class="ulink" href="http://support.oracle.com/" target="_top">http://support.oracle.com/</a>.
  </p><p>
    To discuss problems with other users, you can use one of the MySQL
    mailing lists. <a class="xref" href="introduction.html#mailing-lists" title="1.6.2 MySQL Mailing Lists">Section 1.6.2, “MySQL Mailing Lists”</a>.
  </p><p>
    Writing a good bug report takes patience, but doing it right the
    first time saves time both for us and for yourself. A good bug
    report, containing a full test case for the bug, makes it very
    likely that we will fix the bug in the next release. This section
    helps you write your report correctly so that you do not waste your
    time doing things that may not help us much or at all. Please read
    this section carefully and make sure that all the information
    described here is included in your report.
  </p><p>
    Preferably, you should test the problem using the latest production
    or development version of MySQL Server before posting. Anyone should
    be able to repeat the bug by just using <code class="literal">mysql test &lt;
    script_file</code> on your test case or by running the shell or
    Perl script that you include in the bug report. Any bug that we are
    able to repeat has a high chance of being fixed in the next MySQL
    release.
  </p><p>
    It is most helpful when a good description of the problem is
    included in the bug report. That is, give a good example of
    everything you did that led to the problem and describe, in exact
    detail, the problem itself. The best reports are those that include
    a full example showing how to reproduce the bug or problem. See
    <a class="xref" href="extending-mysql.html#porting" title="28.5 Debugging and Porting MySQL">Section 28.5, “Debugging and Porting MySQL”</a>.
  </p><p>
    Remember that it is possible for us to respond to a report
    containing too much information, but not to one containing too
    little. People often omit facts because they think they know the
    cause of a problem and assume that some details do not matter. A
    good principle to follow is that if you are in doubt about stating
    something, state it. It is faster and less troublesome to write a
    couple more lines in your report than to wait longer for the answer
    if we must ask you to provide information that was missing from the
    initial report.
  </p><p>
    The most common errors made in bug reports are (a) not including the
    version number of the MySQL distribution that you use, and (b) not
    fully describing the platform on which the MySQL server is installed
    (including the platform type and version number). These are highly
    relevant pieces of information, and in 99 cases out of 100, the bug
    report is useless without them. Very often we get questions like,
    <span class="quote">“<span class="quote">Why doesn't this work for me?</span>”</span> Then we find that the
    feature requested wasn't implemented in that MySQL version, or that
    a bug described in a report has been fixed in newer MySQL versions.
    Errors often are platform-dependent. In such cases, it is next to
    impossible for us to fix anything without knowing the operating
    system and the version number of the platform.
  </p><p>
    If you compiled MySQL from source, remember also to provide
    information about your compiler if it is related to the problem.
    Often people find bugs in compilers and think the problem is
    MySQL-related. Most compilers are under development all the time and
    become better version by version. To determine whether your problem
    depends on your compiler, we need to know what compiler you used.
    Note that every compiling problem should be regarded as a bug and
    reported accordingly.
  </p><p>
    If a program produces an error message, it is very important to
    include the message in your report. If we try to search for
    something from the archives, it is better that the error message
    reported exactly matches the one that the program produces. (Even
    the lettercase should be observed.) It is best to copy and paste the
    entire error message into your report. You should never try to
    reproduce the message from memory.
  </p><p>
    If you have a problem with Connector/ODBC (MyODBC), please try to
    generate a trace file and send it with your report. See
    <a class="ulink" href="http://dev.mysql.com/doc/connector-odbc/en/connector-odbc-support-bug-report.html" target="_top">How to Report Connector/ODBC Problems or Bugs</a>.
  </p><p>
    If your report includes long query output lines from test cases that
    you run with the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Tool"><span class="command"><strong>mysql</strong></span></a> command-line tool, you can
    make the output more readable by using the
    <a class="link" href="programs.html#option_mysql_vertical"><code class="option">--vertical</code></a> option or the
    <code class="literal">\G</code> statement terminator. The
    <a class="link" href="sql-syntax.html#explain" title="13.8.2 EXPLAIN Syntax"><code class="literal">EXPLAIN SELECT</code></a>
    example later in this section demonstrates the use of
    <code class="literal">\G</code>.
  </p><p>
    Please include the following information in your report:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
        The version number of the MySQL distribution you are using (for
        example, MySQL 5.7.10). You can find out which version you are
        running by executing <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin version</strong></span></a>. The
        <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin</strong></span></a> program can be found in the
        <code class="filename">bin</code> directory under your MySQL installation
        directory.
      </p></li><li class="listitem"><p>
        The manufacturer and model of the machine on which you
        experience the problem.
      </p></li><li class="listitem"><p>
        The operating system name and version. If you work with Windows,
        you can usually get the name and version number by
        double-clicking your My Computer icon and pulling down the
        <span class="quote">“<span class="quote">Help/About Windows</span>”</span> menu. For most Unix-like
        operating systems, you can get this information by executing the
        command <code class="literal">uname -a</code>.
      </p></li><li class="listitem"><p>
        Sometimes the amount of memory (real and virtual) is relevant.
        If in doubt, include these values.
      </p></li><li class="listitem"><p>
        The contents of the <code class="filename">docs/INFO_BIN</code> file from
        your MySQL installation. This file contains information about
        how MySQL was configured and compiled.
      </p></li><li class="listitem"><p>
        If you are using a source distribution of the MySQL software,
        include the name and version number of the compiler that you
        used. If you have a binary distribution, include the
        distribution name.
      </p></li><li class="listitem"><p>
        If the problem occurs during compilation, include the exact
        error messages and also a few lines of context around the
        offending code in the file where the error occurs.
      </p></li><li class="listitem"><p>
        If <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> died, you should also report the
        statement that crashed <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a>. You can
        usually get this information by running
        <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> with query logging enabled, and then
        looking in the log after <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> crashes. See
        <a class="xref" href="extending-mysql.html#porting" title="28.5 Debugging and Porting MySQL">Section 28.5, “Debugging and Porting MySQL”</a>.
      </p></li><li class="listitem"><p>
        If a database table is related to the problem, include the
        output from the <code class="literal">SHOW CREATE TABLE
        <em class="replaceable"><code>db_name</code></em>.<em class="replaceable"><code>tbl_name</code></em></code>
        statement in the bug report. This is a very easy way to get the
        definition of any table in a database. The information helps us
        create a situation matching the one that you have experienced.
      </p></li><li class="listitem"><p>
        The SQL mode in effect when the problem occurred can be
        significant, so please report the value of the
        <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> system variable. For
        stored procedure, stored function, and trigger objects, the
        relevant <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> value is the
        one in effect when the object was created. For a stored
        procedure or function, the <a class="link" href="sql-syntax.html#show-create-procedure" title="13.7.6.9 SHOW CREATE PROCEDURE Syntax"><code class="literal">SHOW CREATE
        PROCEDURE</code></a> or <a class="link" href="sql-syntax.html#show-create-function" title="13.7.6.8 SHOW CREATE FUNCTION Syntax"><code class="literal">SHOW CREATE
        FUNCTION</code></a> statement shows the relevant SQL mode, or you
        can query <code class="literal">INFORMATION_SCHEMA</code> for the
        information:
      </p><pre class="programlisting">
SELECT ROUTINE_SCHEMA, ROUTINE_NAME, SQL_MODE
FROM INFORMATION_SCHEMA.ROUTINES;
</pre><p>
        For triggers, you can use this statement:
      </p><pre class="programlisting">
SELECT EVENT_OBJECT_SCHEMA, EVENT_OBJECT_TABLE, TRIGGER_NAME, SQL_MODE
FROM INFORMATION_SCHEMA.TRIGGERS;
</pre></li><li class="listitem"><p>
        For performance-related bugs or problems with
        <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statements, you should
        always include the output of <code class="literal">EXPLAIN SELECT
        ...</code>, and at least the number of rows that the
        <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statement produces. You
        should also include the output from <code class="literal">SHOW CREATE TABLE
        <em class="replaceable"><code>tbl_name</code></em></code> for each table
        that is involved. The more information you provide about your
        situation, the more likely it is that someone can help you.
      </p><p>
        The following is an example of a very good bug report. The
        statements are run using the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Tool"><span class="command"><strong>mysql</strong></span></a>
        command-line tool. Note the use of the <code class="literal">\G</code>
        statement terminator for statements that would otherwise provide
        very long output lines that are difficult to read.
      </p><pre class="programlisting">
mysql&gt; <strong class="userinput"><code>SHOW VARIABLES;</code></strong>
mysql&gt; <strong class="userinput"><code>SHOW COLUMNS FROM ...\G</code></strong>
       <em class="replaceable"><code>&lt;output from SHOW COLUMNS&gt;</code></em>
mysql&gt; <strong class="userinput"><code>EXPLAIN SELECT ...\G</code></strong>
       <em class="replaceable"><code>&lt;output from EXPLAIN&gt;</code></em>
mysql&gt; <strong class="userinput"><code>FLUSH STATUS;</code></strong>
mysql&gt; <strong class="userinput"><code>SELECT ...;</code></strong>
       <em class="replaceable"><code>&lt;A short version of the output from SELECT,
       including the time taken to run the query&gt;</code></em>
mysql&gt; <strong class="userinput"><code>SHOW STATUS;</code></strong>
       <em class="replaceable"><code>&lt;output from SHOW STATUS&gt;</code></em>
</pre></li><li class="listitem"><p>
        If a bug or problem occurs while running
        <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a>, try to provide an input script that
        reproduces the anomaly. This script should include any necessary
        source files. The more closely the script can reproduce your
        situation, the better. If you can make a reproducible test case,
        you should upload it to be attached to the bug report.
      </p><p>
        If you cannot provide a script, you should at least include the
        output from <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin variables extended-status
        processlist</strong></span></a> in your report to provide some information
        on how your system is performing.
      </p></li><li class="listitem"><p>
        If you cannot produce a test case with only a few rows, or if
        the test table is too big to be included in the bug report (more
        than 10 rows), you should dump your tables using
        <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a> and create a
        <code class="filename">README</code> file that describes your problem.
        Create a compressed archive of your files using
        <span class="command"><strong>tar</strong></span> and <span class="command"><strong>gzip</strong></span> or
        <span class="command"><strong>zip</strong></span>. After you initiate a bug report for our
        bugs database at <a class="ulink" href="http://bugs.mysql.com/" target="_top">http://bugs.mysql.com/</a>, click
        the Files tab in the bug report for instructions on uploading
        the archive to the bugs database.
      </p></li><li class="listitem"><p>
        If you believe that the MySQL server produces a strange result
        from a statement, include not only the result, but also your
        opinion of what the result should be, and an explanation
        describing the basis for your opinion.
      </p></li><li class="listitem"><p>
        When you provide an example of the problem, it is better to use
        the table names, variable names, and so forth that exist in your
        actual situation than to come up with new names. The problem
        could be related to the name of a table or variable. These cases
        are rare, perhaps, but it is better to be safe than sorry. After
        all, it should be easier for you to provide an example that uses
        your actual situation, and it is by all means better for us. If
        you have data that you do not want to be visible to others in
        the bug report, you can upload it using the Files tab as
        previously described. If the information is really top secret
        and you do not want to show it even to us, go ahead and provide
        an example using other names, but please regard this as the last
        choice.
      </p></li><li class="listitem"><p>
        Include all the options given to the relevant programs, if
        possible. For example, indicate the options that you use when
        you start the <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> server, as well as the
        options that you use to run any MySQL client programs. The
        options to programs such as <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> and
        <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Tool"><span class="command"><strong>mysql</strong></span></a>, and to the
        <span class="command"><strong>configure</strong></span> script, are often key to resolving
        problems and are very relevant. It is never a bad idea to
        include them. If your problem involves a program written in a
        language such as Perl or PHP, please include the language
        processor's version number, as well as the version for any
        modules that the program uses. For example, if you have a Perl
        script that uses the <code class="literal">DBI</code> and
        <code class="literal">DBD::mysql</code> modules, include the version
        numbers for Perl, <code class="literal">DBI</code>, and
        <code class="literal">DBD::mysql</code>.
      </p></li><li class="listitem"><p>
        If your question is related to the privilege system, please
        include the output of <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin reload</strong></span></a>, and
        all the error messages you get when trying to connect. When you
        test your privileges, you should execute <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin
        reload version</strong></span></a> and try to connect with the program
        that gives you trouble.
      </p></li><li class="listitem"><p>
        If you have a patch for a bug, do include it. But do not assume
        that the patch is all we need, or that we can use it, if you do
        not provide some necessary information such as test cases
        showing the bug that your patch fixes. We might find problems
        with your patch or we might not understand it at all. If so, we
        cannot use it.
      </p><p>
        If we cannot verify the exact purpose of the patch, we will not
        use it. Test cases help us here. Show that the patch handles all
        the situations that may occur. If we find a borderline case
        (even a rare one) where the patch will not work, it may be
        useless.
      </p></li><li class="listitem"><p>
        Guesses about what the bug is, why it occurs, or what it depends
        on are usually wrong. Even the MySQL team cannot guess such
        things without first using a debugger to determine the real
        cause of a bug.
      </p></li><li class="listitem"><p>
        Indicate in your bug report that you have checked the reference
        manual and mail archive so that others know you have tried to
        solve the problem yourself.
      </p></li><li class="listitem"><p>
        If your data appears corrupt or you get errors when you access a
        particular table, first check your tables with
        <a class="link" href="sql-syntax.html#check-table" title="13.7.3.2 CHECK TABLE Syntax"><code class="literal">CHECK TABLE</code></a>. If that statement
        reports any errors:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
            The <code class="literal">InnoDB</code> crash recovery mechanism
            handles cleanup when the server is restarted after being
            killed, so in typical operation there is no need to
            <span class="quote">“<span class="quote">repair</span>”</span> tables. If you encounter an error with
            <code class="literal">InnoDB</code> tables, restart the server and see
            whether the problem persists, or whether the error affected
            only cached data in memory. If data is corrupted on disk,
            consider restarting with the
            <a class="link" href="innodb-storage-engine.html#sysvar_innodb_force_recovery"><code class="literal">innodb_force_recovery</code></a>
            option enabled so that you can dump the affected tables.
          </p></li><li class="listitem"><p>
            For non-transactional tables, try to repair them with
            <a class="link" href="sql-syntax.html#repair-table" title="13.7.3.5 REPAIR TABLE Syntax"><code class="literal">REPAIR TABLE</code></a> or with
            <a class="link" href="programs.html#myisamchk" title="4.6.4 myisamchk — MyISAM Table-Maintenance Utility"><span class="command"><strong>myisamchk</strong></span></a>. See
            <a class="xref" href="server-administration.html" title="Chapter 5 MySQL Server Administration">Chapter 5, <i>MySQL Server Administration</i></a>.
</p></li></ul>
</div>
<p>
        If you are running Windows, please verify the value of
        <a class="link" href="server-administration.html#sysvar_lower_case_table_names"><code class="literal">lower_case_table_names</code></a> using
        the <code class="literal">SHOW VARIABLES LIKE
        'lower_case_table_names'</code> statement. This variable
        affects how the server handles lettercase of database and table
        names. Its effect for a given value should be as described in
        <a class="xref" href="language-structure.html#identifier-case-sensitivity" title="9.2.2 Identifier Case Sensitivity">Section 9.2.2, “Identifier Case Sensitivity”</a>.
      </p></li><li class="listitem"><p>
        If you often get corrupted tables, you should try to find out
        when and why this happens. In this case, the error log in the
        MySQL data directory may contain some information about what
        happened. (This is the file with the <code class="filename">.err</code>
        suffix in the name.) See <a class="xref" href="server-administration.html#error-log" title="5.4.2 The Error Log">Section 5.4.2, “The Error Log”</a>. Please
        include any relevant information from this file in your bug
        report. Normally <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> should
        <span class="emphasis"><em>never</em></span> crash a table if nothing killed it in
        the middle of an update. If you can find the cause of
        <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> dying, it is much easier for us to
        provide you with a fix for the problem. See
        <a class="xref" href="error-handling.html#what-is-crashing" title="B.5.1 How to Determine What Is Causing a Problem">Section B.5.1, “How to Determine What Is Causing a Problem”</a>.
      </p></li><li class="listitem"><p>
        If possible, download and install the most recent version of
        MySQL Server and check whether it solves your problem. All
        versions of the MySQL software are thoroughly tested and should
        work without problems. We believe in making everything as
        backward-compatible as possible, and you should be able to
        switch MySQL versions without difficulty. See
        <a class="xref" href="installing.html#which-version" title="2.1.1 Which MySQL Version and Distribution to Install">Section 2.1.1, “Which MySQL Version and Distribution to Install”</a>.
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="compatibility"></a>1.8 MySQL Standards Compliance</h2>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#extensions-to-ansi">1.8.1 MySQL Extensions to Standard SQL</a></span></dt><dt><span class="section"><a href="introduction.html#differences-from-ansi">1.8.2 MySQL Differences from Standard SQL</a></span></dt><dt><span class="section"><a href="introduction.html#constraints">1.8.3 How MySQL Deals with Constraints</a></span></dt></dl>
</div>
<a class="indexterm" name="idm139899661292624"></a><a class="indexterm" name="idm139899661291168"></a><a class="indexterm" name="idm139899661290096"></a><a class="indexterm" name="idm139899661288608"></a><a class="indexterm" name="idm139899661287120"></a><p>
      This section describes how MySQL relates to the ANSI/ISO SQL
      standards. MySQL Server has many extensions to the SQL standard,
      and here you can find out what they are and how to use them. You
      can also find information about functionality missing from MySQL
      Server, and how to work around some of the differences.
    </p><p>
      The SQL standard has been evolving since 1986 and several versions
      exist. In this manual, <span class="quote">“<span class="quote">SQL-92</span>”</span> refers to the
      standard released in 1992, <span class="quote">“<span class="quote">SQL:1999</span>”</span> refers to the
      standard released in 1999, <span class="quote">“<span class="quote">SQL:2003</span>”</span> refers to the
      standard released in 2003, and <span class="quote">“<span class="quote">SQL:2008</span>”</span> refers to
      the most recent version of the standard, released in 2008. We use
      the phrase <span class="quote">“<span class="quote">the SQL standard</span>”</span> or <span class="quote">“<span class="quote">standard
      SQL</span>”</span> to mean the current version of the SQL Standard at any
      time.
    </p><p>
      One of our main goals with the product is to continue to work
      toward compliance with the SQL standard, but without sacrificing
      speed or reliability. We are not afraid to add extensions to SQL
      or support for non-SQL features if this greatly increases the
      usability of MySQL Server for a large segment of our user base.
      The <a class="link" href="sql-syntax.html#handler" title="13.2.4 HANDLER Syntax"><code class="literal">HANDLER</code></a> interface is an example
      of this strategy. See <a class="xref" href="sql-syntax.html#handler" title="13.2.4 HANDLER Syntax">Section 13.2.4, “HANDLER Syntax”</a>.
    </p><p>
      We continue to support transactional and nontransactional
      databases to satisfy both mission-critical 24/7 usage and heavy
      Web or logging usage.
    </p><p>
      MySQL Server was originally designed to work with medium-sized
      databases (10-100 million rows, or about 100MB per table) on small
      computer systems. Today MySQL Server handles terabyte-sized
      databases.
    </p><p>
      We are not targeting real-time support, although MySQL replication
      capabilities offer significant functionality.
    </p><p>
      MySQL supports ODBC levels 0 to 3.51.
    </p><p>
      MySQL supports high-availability database clustering using the
      <a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html" target="_top"><code class="literal">NDBCLUSTER</code></a> storage engine. See
      <a class="ulink" href="http://dev.mysql.com/doc/refman/5.7/en/mysql-cluster.html" target="_top">MySQL NDB Cluster 7.5 and NDB Cluster 7.6</a>.
    </p><p>
      We implement XML functionality which supports most of the W3C
      XPath standard. See <a class="xref" href="functions.html#xml-functions" title="12.11 XML Functions">Section 12.11, “XML Functions”</a>.
    </p><p>
      MySQL supports a native JSON data type as defined by RFC 7159, and
      based on the ECMAScript standard (ECMA-262). See
      <a class="xref" href="data-types.html#json" title="11.6 The JSON Data Type">Section 11.6, “The JSON Data Type”</a>. MySQL also implements a subset of the
      SQL/JSON functions specified by a pre-publication draft of the
      SQL:2016 standard; see <a class="xref" href="functions.html#json-functions" title="12.16 JSON Functions">Section 12.16, “JSON Functions”</a>, for more
      information.
</p>
<h3><a name="idm139899661270448"></a>Selecting SQL Modes</h3>
<p>
      The MySQL server can operate in different SQL modes, and can apply
      these modes differently for different clients, depending on the
      value of the <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> system
      variable. DBAs can set the global SQL mode to match site server
      operating requirements, and each application can set its session
      SQL mode to its own requirements.
    </p><p>
      Modes affect the SQL syntax MySQL supports and the data validation
      checks it performs. This makes it easier to use MySQL in different
      environments and to use MySQL together with other database
      servers.
    </p><p>
      For more information on setting the SQL mode, see
      <a class="xref" href="server-administration.html#sql-mode" title="5.1.8 Server SQL Modes">Section 5.1.8, “Server SQL Modes”</a>.
</p>
<h3><a name="idm139899661265888"></a>Running MySQL in ANSI Mode</h3>
<a class="indexterm" name="idm139899661265168"></a><a class="indexterm" name="idm139899661263680"></a><p>
      To run MySQL Server in ANSI mode, start <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a>
      with the <a class="link" href="server-administration.html#option_mysqld_ansi"><code class="option">--ansi</code></a> option. Running the
      server in ANSI mode is the same as starting it with the following
      options:
    </p><pre data-lang="terminal" class="programlisting">
--transaction-isolation=SERIALIZABLE --sql-mode=ANSI
</pre><p>
      To achieve the same effect at runtime, execute these two
      statements:
    </p><pre data-lang="sql" class="programlisting">
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET GLOBAL sql_mode = 'ANSI';
</pre><p>
      You can see that setting the
      <a class="link" href="server-administration.html#sysvar_sql_mode"><code class="literal">sql_mode</code></a> system variable to
      <code class="literal">'ANSI'</code> enables all SQL mode options that are
      relevant for ANSI mode as follows:
    </p><pre data-lang="sql" class="programlisting">
mysql&gt; <strong class="userinput"><code>SET GLOBAL sql_mode='ANSI';</code></strong>
mysql&gt; <strong class="userinput"><code>SELECT @@global.sql_mode;</code></strong>
        -&gt; 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI'
</pre><p>
      Running the server in ANSI mode with
      <a class="link" href="server-administration.html#option_mysqld_ansi"><code class="option">--ansi</code></a> is not quite the same as
      setting the SQL mode to <code class="literal">'ANSI'</code> because the
      <a class="link" href="server-administration.html#option_mysqld_ansi"><code class="option">--ansi</code></a> option also sets the
      transaction isolation level.
    </p><p>
      See <a class="xref" href="server-administration.html#server-options" title="5.1.4 Server Command Options">Section 5.1.4, “Server Command Options”</a>.
</p>
<div class="section">

<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="extensions-to-ansi"></a>1.8.1 MySQL Extensions to Standard SQL</h3>
</div>
</div>
</div>
<a class="indexterm" name="idm139899661246192"></a><a class="indexterm" name="idm139899661244736"></a><p>
        MySQL Server supports some extensions that you probably will not
        find in other SQL DBMSs. Be warned that if you use them, your
        code will not be portable to other SQL servers. In some cases,
        you can write code that includes MySQL extensions, but is still
        portable, by using comments of the following form:
      </p><pre data-lang="sql" class="programlisting">
/*! <em class="replaceable"><code>MySQL-specific code</code></em> */
</pre><p>
        In this case, MySQL Server parses and executes the code within
        the comment as it would any other SQL statement, but other SQL
        servers will ignore the extensions. For example, MySQL Server
        recognizes the <code class="literal">STRAIGHT_JOIN</code> keyword in the
        following statement, but other servers will not:
      </p><pre data-lang="sql" class="programlisting">
SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...
</pre><p>
        If you add a version number after the <code class="literal">!</code>
        character, the syntax within the comment is executed only if the
        MySQL version is greater than or equal to the specified version
        number. The <code class="literal">KEY_BLOCK_SIZE</code> clause in the
        following comment is executed only by servers from MySQL 5.1.10
        or higher:
      </p><pre data-lang="sql" class="programlisting">
CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024 */;
</pre><p>
        The following descriptions list MySQL extensions, organized by
        category.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            Organization of data on disk
          </p><a class="indexterm" name="idm139899661234608"></a><a class="indexterm" name="idm139899661233120"></a><a class="indexterm" name="idm139899661231632"></a><a class="indexterm" name="idm139899661230144"></a><p>
            MySQL Server maps each database to a directory under the
            MySQL data directory, and maps tables within a database to
            file names in the database directory. Consequently, database
            and table names are case-sensitive in MySQL Server on
            operating systems that have case-sensitive file names (such
            as most Unix systems). See
            <a class="xref" href="language-structure.html#identifier-case-sensitivity" title="9.2.2 Identifier Case Sensitivity">Section 9.2.2, “Identifier Case Sensitivity”</a>.
          </p></li><li class="listitem"><p>
            General language syntax
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                By default, strings can be enclosed by
                <code class="literal">"</code> as well as <code class="literal">'</code>. If
                the <a class="link" href="server-administration.html#sqlmode_ansi_quotes"><code class="literal">ANSI_QUOTES</code></a> SQL
                mode is enabled, strings can be enclosed only by
                <code class="literal">'</code> and the server interprets strings
                enclosed by <code class="literal">"</code> as identifiers.
              </p></li><li class="listitem"><p>
                <code class="literal">\</code> is the escape character in strings.
              </p></li><li class="listitem"><p>
                In SQL statements, you can access tables from different
                databases with the
                <em class="replaceable"><code>db_name.tbl_name</code></em> syntax. Some
                SQL servers provide the same functionality but call this
                <code class="literal">User space</code>. MySQL Server doesn't
                support tablespaces such as used in statements like
                this: <code class="literal">CREATE TABLE ralph.my_table ... IN
                my_tablespace</code>.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            SQL statement syntax
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <a class="link" href="sql-syntax.html#analyze-table" title="13.7.3.1 ANALYZE TABLE Syntax"><code class="literal">ANALYZE TABLE</code></a>,
                <a class="link" href="sql-syntax.html#check-table" title="13.7.3.2 CHECK TABLE Syntax"><code class="literal">CHECK TABLE</code></a>,
                <a class="link" href="sql-syntax.html#optimize-table" title="13.7.3.4 OPTIMIZE TABLE Syntax"><code class="literal">OPTIMIZE TABLE</code></a>, and
                <a class="link" href="sql-syntax.html#repair-table" title="13.7.3.5 REPAIR TABLE Syntax"><code class="literal">REPAIR TABLE</code></a> statements.
              </p></li><li class="listitem"><p>
                The <a class="link" href="sql-syntax.html#create-database" title="13.1.11 CREATE DATABASE Syntax"><code class="literal">CREATE DATABASE</code></a>,
                <a class="link" href="sql-syntax.html#drop-database" title="13.1.22 DROP DATABASE Syntax"><code class="literal">DROP DATABASE</code></a>, and
                <a class="link" href="sql-syntax.html#alter-database" title="13.1.2 ALTER DATABASE Syntax"><code class="literal">ALTER DATABASE</code></a>
                statements. See <a class="xref" href="sql-syntax.html#create-database" title="13.1.11 CREATE DATABASE Syntax">Section 13.1.11, “CREATE DATABASE Syntax”</a>,
                <a class="xref" href="sql-syntax.html#drop-database" title="13.1.22 DROP DATABASE Syntax">Section 13.1.22, “DROP DATABASE Syntax”</a>, and
                <a class="xref" href="sql-syntax.html#alter-database" title="13.1.2 ALTER DATABASE Syntax">Section 13.1.2, “ALTER DATABASE Syntax”</a>.
              </p></li><li class="listitem"><p>
                The <a class="link" href="sql-syntax.html#do" title="13.2.3 DO Syntax"><code class="literal">DO</code></a> statement.
              </p></li><li class="listitem"><p>
                <a class="link" href="sql-syntax.html#explain" title="13.8.2 EXPLAIN Syntax"><code class="literal">EXPLAIN
                SELECT</code></a> to obtain a description of how tables
                are processed by the query optimizer.
              </p></li><li class="listitem"><p>
                The <a class="link" href="sql-syntax.html#flush" title="13.7.7.3 FLUSH Syntax"><code class="literal">FLUSH</code></a> and
                <a class="link" href="sql-syntax.html#reset" title="13.7.7.6 RESET Syntax"><code class="literal">RESET</code></a> statements.
              </p></li><li class="listitem"><p>
                The
                <a class="link" href="sql-syntax.html#set-variable" title="13.7.5.1 SET Syntax for Variable Assignment"><code class="literal">SET</code></a>
                statement. See <a class="xref" href="sql-syntax.html#set-variable" title="13.7.5.1 SET Syntax for Variable Assignment">Section 13.7.5.1, “SET Syntax for Variable Assignment”</a>.
              </p></li><li class="listitem"><p>
                The <a class="link" href="sql-syntax.html#show" title="13.7.6 SHOW Syntax"><code class="literal">SHOW</code></a> statement. See
                <a class="xref" href="sql-syntax.html#show" title="13.7.6 SHOW Syntax">Section 13.7.6, “SHOW Syntax”</a>. The information produced by many
                of the MySQL-specific
                <a class="link" href="sql-syntax.html#show" title="13.7.6 SHOW Syntax"><code class="literal">SHOW</code></a> statements can be
                obtained in more standard fashion by using
                <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> to query
                <code class="literal">INFORMATION_SCHEMA</code>. See
                <a class="xref" href="information-schema.html" title="Chapter 24 INFORMATION_SCHEMA Tables">Chapter 24, <i>INFORMATION_SCHEMA Tables</i></a>.
              </p></li><li class="listitem"><p>
                <a class="indexterm" name="idm139899661184384"></a>

                <a class="indexterm" name="idm139899661183312"></a>

                Use of <a class="link" href="sql-syntax.html#load-data" title="13.2.7 LOAD DATA INFILE Syntax"><code class="literal">LOAD
                DATA INFILE</code></a>. In many cases, this syntax is
                compatible with Oracle's
                <a class="link" href="sql-syntax.html#load-data" title="13.2.7 LOAD DATA INFILE Syntax"><code class="literal">LOAD DATA
                INFILE</code></a>. See <a class="xref" href="sql-syntax.html#load-data" title="13.2.7 LOAD DATA INFILE Syntax">Section 13.2.7, “LOAD DATA INFILE Syntax”</a>.
              </p></li><li class="listitem"><p>
                Use of <a class="link" href="sql-syntax.html#rename-table" title="13.1.33 RENAME TABLE Syntax"><code class="literal">RENAME TABLE</code></a>. See
                <a class="xref" href="sql-syntax.html#rename-table" title="13.1.33 RENAME TABLE Syntax">Section 13.1.33, “RENAME TABLE Syntax”</a>.
              </p></li><li class="listitem"><p>
                Use of <a class="link" href="sql-syntax.html#replace" title="13.2.9 REPLACE Syntax"><code class="literal">REPLACE</code></a> instead of
                <a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE Syntax"><code class="literal">DELETE</code></a> plus
                <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a>. See
                <a class="xref" href="sql-syntax.html#replace" title="13.2.9 REPLACE Syntax">Section 13.2.9, “REPLACE Syntax”</a>.
              </p></li><li class="listitem"><p>
                Use of <code class="literal">CHANGE
                <em class="replaceable"><code>col_name</code></em></code>,
                <code class="literal">DROP
                <em class="replaceable"><code>col_name</code></em></code>, or
                <a class="link" href="sql-syntax.html#drop-index" title="13.1.25 DROP INDEX Syntax"><code class="literal">DROP INDEX</code></a>,
                <code class="literal">IGNORE</code> or <code class="literal">RENAME</code>
                in <a class="link" href="sql-syntax.html#alter-table" title="13.1.8 ALTER TABLE Syntax"><code class="literal">ALTER TABLE</code></a>
                statements. Use of multiple <code class="literal">ADD</code>,
                <code class="literal">ALTER</code>, <code class="literal">DROP</code>, or
                <code class="literal">CHANGE</code> clauses in an
                <a class="link" href="sql-syntax.html#alter-table" title="13.1.8 ALTER TABLE Syntax"><code class="literal">ALTER TABLE</code></a> statement.
                See <a class="xref" href="sql-syntax.html#alter-table" title="13.1.8 ALTER TABLE Syntax">Section 13.1.8, “ALTER TABLE Syntax”</a>.
              </p></li><li class="listitem"><p>
                Use of index names, indexes on a prefix of a column, and
                use of <code class="literal">INDEX</code> or
                <code class="literal">KEY</code> in <a class="link" href="sql-syntax.html#create-table" title="13.1.18 CREATE TABLE Syntax"><code class="literal">CREATE
                TABLE</code></a> statements. See
                <a class="xref" href="sql-syntax.html#create-table" title="13.1.18 CREATE TABLE Syntax">Section 13.1.18, “CREATE TABLE Syntax”</a>.
              </p></li><li class="listitem"><p>
                Use of <code class="literal">TEMPORARY</code> or <code class="literal">IF NOT
                EXISTS</code> with <a class="link" href="sql-syntax.html#create-table" title="13.1.18 CREATE TABLE Syntax"><code class="literal">CREATE
                TABLE</code></a>.
              </p></li><li class="listitem"><p>
                Use of <code class="literal">IF EXISTS</code> with
                <a class="link" href="sql-syntax.html#drop-table" title="13.1.29 DROP TABLE Syntax"><code class="literal">DROP TABLE</code></a> and
                <a class="link" href="sql-syntax.html#drop-database" title="13.1.22 DROP DATABASE Syntax"><code class="literal">DROP DATABASE</code></a>.
              </p></li><li class="listitem"><p>
                The capability of dropping multiple tables with a single
                <a class="link" href="sql-syntax.html#drop-table" title="13.1.29 DROP TABLE Syntax"><code class="literal">DROP TABLE</code></a> statement.
              </p></li><li class="listitem"><p>
                The <code class="literal">ORDER BY</code> and
                <code class="literal">LIMIT</code> clauses of the
                <a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE Syntax"><code class="literal">UPDATE</code></a> and
                <a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE Syntax"><code class="literal">DELETE</code></a> statements.
              </p></li><li class="listitem"><p>
                <code class="literal">INSERT INTO <em class="replaceable"><code>tbl_name</code></em>
                SET <em class="replaceable"><code>col_name</code></em> = ...</code>
                syntax.
              </p></li><li class="listitem"><p>
                The <code class="literal">DELAYED</code> clause of the
                <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a> and
                <a class="link" href="sql-syntax.html#replace" title="13.2.9 REPLACE Syntax"><code class="literal">REPLACE</code></a> statements.
              </p></li><li class="listitem"><p>
                The <code class="literal">LOW_PRIORITY</code> clause of the
                <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a>,
                <a class="link" href="sql-syntax.html#replace" title="13.2.9 REPLACE Syntax"><code class="literal">REPLACE</code></a>,
                <a class="link" href="sql-syntax.html#delete" title="13.2.2 DELETE Syntax"><code class="literal">DELETE</code></a>, and
                <a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE Syntax"><code class="literal">UPDATE</code></a> statements.
              </p></li><li class="listitem"><p>
                Use of <code class="literal">INTO OUTFILE</code> or <code class="literal">INTO
                DUMPFILE</code> in
                <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statements. See
                <a class="xref" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax">Section 13.2.10, “SELECT Syntax”</a>.
              </p></li><li class="listitem"><p>
                Options such as <code class="literal">STRAIGHT_JOIN</code> or
                <code class="literal">SQL_SMALL_RESULT</code> in
                <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statements.
              </p></li><li class="listitem"><p>
                You don't need to name all selected columns in the
                <code class="literal">GROUP BY</code> clause. This gives better
                performance for some very specific, but quite normal
                queries. See
                <a class="xref" href="functions.html#group-by-functions-and-modifiers" title="12.19 Aggregate (GROUP BY) Functions">Section 12.19, “Aggregate (GROUP BY) Functions”</a>.
              </p></li><li class="listitem"><p>
                You can specify <code class="literal">ASC</code> and
                <code class="literal">DESC</code> with <code class="literal">GROUP
                BY</code>, not just with <code class="literal">ORDER BY</code>.
              </p></li><li class="listitem"><p>
                The ability to set variables in a statement with the
                <code class="literal">:=</code> assignment operator. See
                <a class="xref" href="language-structure.html#user-variables" title="9.4 User-Defined Variables">Section 9.4, “User-Defined Variables”</a>.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            Data types
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                The <a class="link" href="data-types.html#integer-types" title="11.2.1 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT"><code class="literal">MEDIUMINT</code></a>,
                <a class="link" href="data-types.html#set" title="11.4.5 The SET Type"><code class="literal">SET</code></a>, and
                <a class="link" href="data-types.html#enum" title="11.4.4 The ENUM Type"><code class="literal">ENUM</code></a> data types, and the
                various <a class="link" href="data-types.html#blob" title="11.4.3 The BLOB and TEXT Types"><code class="literal">BLOB</code></a> and
                <a class="link" href="data-types.html#blob" title="11.4.3 The BLOB and TEXT Types"><code class="literal">TEXT</code></a> data types.
              </p></li><li class="listitem"><p>
                The <code class="literal">AUTO_INCREMENT</code>,
                <code class="literal">BINARY</code>, <code class="literal">NULL</code>,
                <code class="literal">UNSIGNED</code>, and
                <code class="literal">ZEROFILL</code> data type attributes.
</p></li></ul>
</div>
</li><li class="listitem"><p>
            Functions and operators
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
                To make it easier for users who migrate from other SQL
                environments, MySQL Server supports aliases for many
                functions. For example, all string functions support
                both standard SQL syntax and ODBC syntax.
              </p></li><li class="listitem"><p>
                MySQL Server understands the
                <a class="link" href="functions.html#operator_or"><code class="literal">||</code></a> and
                <a class="link" href="functions.html#operator_and"><code class="literal">&amp;&amp;</code></a>
                operators to mean logical OR and AND, as in the C
                programming language. In MySQL Server,
                <a class="link" href="functions.html#operator_or"><code class="literal">||</code></a> and
                <a class="link" href="functions.html#operator_or"><code class="literal">OR</code></a> are
                synonyms, as are
                <a class="link" href="functions.html#operator_and"><code class="literal">&amp;&amp;</code></a>
                and <a class="link" href="functions.html#operator_and"><code class="literal">AND</code></a>.
                Because of this nice syntax, MySQL Server doesn't
                support the standard SQL
                <a class="link" href="functions.html#operator_or"><code class="literal">||</code></a> operator
                for string concatenation; use
                <a class="link" href="functions.html#function_concat"><code class="literal">CONCAT()</code></a> instead. Because
                <a class="link" href="functions.html#function_concat"><code class="literal">CONCAT()</code></a> takes any number
                of arguments, it is easy to convert use of the
                <a class="link" href="functions.html#operator_or"><code class="literal">||</code></a> operator
                to MySQL Server.
              </p></li><li class="listitem"><p>
                Use of <a class="link" href="functions.html#function_count"><code class="literal">COUNT(DISTINCT
                <em class="replaceable"><code>value_list</code></em>)</code></a> where
                <em class="replaceable"><code>value_list</code></em> has more than one
                element.
              </p></li><li class="listitem"><p>
                String comparisons are case insensitive by default, with
                sort ordering determined by the collation of the current
                character set, which is <code class="literal">utf8mb4</code> by
                default. To perform case-sensitive comparisons instead,
                you should declare your columns with the
                <code class="literal">BINARY</code> attribute or use the
                <code class="literal">BINARY</code> cast, which causes comparisons
                to be done using the underlying character code values
                rather than a lexical ordering.
              </p></li><li class="listitem"><p>
                <a class="indexterm" name="idm139899661074976"></a>

                <a class="indexterm" name="idm139899661073888"></a>

                The <a class="link" href="functions.html#function_mod"><code class="literal">%</code></a>
                operator is a synonym for
                <a class="link" href="functions.html#function_mod"><code class="literal">MOD()</code></a>. That is,
                <code class="literal"><em class="replaceable"><code>N</code></em> %
                <em class="replaceable"><code>M</code></em></code> is equivalent to
                <a class="link" href="functions.html#function_mod"><code class="literal">MOD(<em class="replaceable"><code>N</code></em>,<em class="replaceable"><code>M</code></em>)</code></a>.
                <a class="link" href="functions.html#function_mod"><code class="literal">%</code></a> is
                supported for C programmers and for compatibility with
                PostgreSQL.
              </p></li><li class="listitem"><p>
                The <a class="link" href="functions.html#operator_equal"><code class="literal">=</code></a>,
                <a class="link" href="functions.html#operator_not-equal"><code class="literal">&lt;&gt;</code></a>,
                <a class="link" href="functions.html#operator_less-than-or-equal"><code class="literal">&lt;=</code></a>,
                <a class="link" href="functions.html#operator_less-than"><code class="literal">&lt;</code></a>,
                <a class="link" href="functions.html#operator_greater-than-or-equal"><code class="literal">&gt;=</code></a>,
                <a class="link" href="functions.html#operator_greater-than"><code class="literal">&gt;</code></a>,
                <a class="link" href="functions.html#operator_left-shift"><code class="literal">&lt;&lt;</code></a>,
                <a class="link" href="functions.html#operator_right-shift"><code class="literal">&gt;&gt;</code></a>,
                <a class="link" href="functions.html#operator_equal-to"><code class="literal">&lt;=&gt;</code></a>,
                <a class="link" href="functions.html#operator_and"><code class="literal">AND</code></a>,
                <a class="link" href="functions.html#operator_or"><code class="literal">OR</code></a>, or
                <a class="link" href="functions.html#operator_like"><code class="literal">LIKE</code></a>
                operators may be used in expressions in the output
                column list (to the left of the <code class="literal">FROM</code>)
                in <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT</code></a> statements. For
                example:
              </p><pre data-lang="sql" class="programlisting">
mysql&gt; <strong class="userinput"><code>SELECT col1=1 AND col2=2 FROM my_table;</code></strong>
</pre></li><li class="listitem"><p>
                The <a class="link" href="functions.html#function_last-insert-id"><code class="literal">LAST_INSERT_ID()</code></a>
                function returns the most recent
                <code class="literal">AUTO_INCREMENT</code> value. See
                <a class="xref" href="functions.html#information-functions" title="12.14 Information Functions">Section 12.14, “Information Functions”</a>.
              </p></li><li class="listitem"><p>
                <a class="link" href="functions.html#operator_like"><code class="literal">LIKE</code></a> is permitted on
                numeric values.
              </p></li><li class="listitem"><p>
                The <a class="link" href="functions.html#operator_regexp"><code class="literal">REGEXP</code></a> and
                <a class="link" href="functions.html#operator_not-regexp"><code class="literal">NOT REGEXP</code></a> extended regular
                expression operators.
              </p></li><li class="listitem"><p>
                <a class="link" href="functions.html#function_concat"><code class="literal">CONCAT()</code></a> or
                <a class="link" href="functions.html#function_char"><code class="literal">CHAR()</code></a> with one argument
                or more than two arguments. (In MySQL Server, these
                functions can take a variable number of arguments.)
              </p></li><li class="listitem"><p>
                The <a class="link" href="functions.html#function_bit-count"><code class="literal">BIT_COUNT()</code></a>,
                <a class="link" href="functions.html#operator_case"><code class="literal">CASE</code></a>,
                <a class="link" href="functions.html#function_elt"><code class="literal">ELT()</code></a>,
                <a class="link" href="functions.html#function_from-days"><code class="literal">FROM_DAYS()</code></a>,
                <a class="link" href="functions.html#function_format"><code class="literal">FORMAT()</code></a>,
                <a class="link" href="functions.html#function_if"><code class="literal">IF()</code></a>,
                <a class="link" href="functions.html#function_md5"><code class="literal">MD5()</code></a>,
                <a class="link" href="functions.html#function_period-add"><code class="literal">PERIOD_ADD()</code></a>,
                <a class="link" href="functions.html#function_period-diff"><code class="literal">PERIOD_DIFF()</code></a>,
                <a class="link" href="functions.html#function_to-days"><code class="literal">TO_DAYS()</code></a>, and
                <a class="link" href="functions.html#function_weekday"><code class="literal">WEEKDAY()</code></a> functions.
              </p></li><li class="listitem"><p>
                Use of <a class="link" href="functions.html#function_trim"><code class="literal">TRIM()</code></a> to trim
                substrings. Standard SQL supports removal of single
                characters only.
              </p></li><li class="listitem"><p>
                The <code class="literal">GROUP BY</code> functions
                <a class="link" href="functions.html#function_std"><code class="literal">STD()</code></a>,
                <a class="link" href="functions.html#function_bit-or"><code class="literal">BIT_OR()</code></a>,
                <a class="link" href="functions.html#function_bit-and"><code class="literal">BIT_AND()</code></a>,
                <a class="link" href="functions.html#function_bit-xor"><code class="literal">BIT_XOR()</code></a>, and
                <a class="link" href="functions.html#function_group-concat"><code class="literal">GROUP_CONCAT()</code></a>. See
                <a class="xref" href="functions.html#group-by-functions-and-modifiers" title="12.19 Aggregate (GROUP BY) Functions">Section 12.19, “Aggregate (GROUP BY) Functions”</a>.
</p></li></ul>
</div>
</li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="differences-from-ansi"></a>1.8.2 MySQL Differences from Standard SQL</h3>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#ansi-diff-select-into-table">1.8.2.1 SELECT INTO TABLE Differences</a></span></dt><dt><span class="section"><a href="introduction.html#ansi-diff-update">1.8.2.2 UPDATE Differences</a></span></dt><dt><span class="section"><a href="introduction.html#ansi-diff-foreign-keys">1.8.2.3 Foreign Key Differences</a></span></dt><dt><span class="section"><a href="introduction.html#ansi-diff-comments">1.8.2.4 '--' as the Start of a Comment</a></span></dt></dl>
</div>
<a class="indexterm" name="idm139899661002736"></a><p>
        We try to make MySQL Server follow the ANSI SQL standard and the
        ODBC SQL standard, but MySQL Server performs operations
        differently in some cases:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
            There are several differences between the MySQL and standard
            SQL privilege systems. For example, in MySQL, privileges for
            a table are not automatically revoked when you delete a
            table. You must explicitly issue a
            <a class="link" href="sql-syntax.html#revoke" title="13.7.1.8 REVOKE Syntax"><code class="literal">REVOKE</code></a> statement to revoke
            privileges for a table. For more information, see
            <a class="xref" href="sql-syntax.html#revoke" title="13.7.1.8 REVOKE Syntax">Section 13.7.1.8, “REVOKE Syntax”</a>.
          </p></li><li class="listitem"><p>
            The <a class="link" href="functions.html#function_cast"><code class="literal">CAST()</code></a> function does not
            support cast to <a class="link" href="data-types.html#floating-point-types" title="11.2.3 Floating-Point Types (Approximate Value) - FLOAT, DOUBLE"><code class="literal">REAL</code></a> or
            <a class="link" href="data-types.html#integer-types" title="11.2.1 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT"><code class="literal">BIGINT</code></a>. See
            <a class="xref" href="functions.html#cast-functions" title="12.10 Cast Functions and Operators">Section 12.10, “Cast Functions and Operators”</a>.
</p></li></ul>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="ansi-diff-select-into-table"></a>1.8.2.1 SELECT INTO TABLE Differences</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660990352"></a><p>
          MySQL Server doesn't support the <code class="literal">SELECT ... INTO
          TABLE</code> Sybase SQL extension. Instead, MySQL Server
          supports the
          <a class="link" href="sql-syntax.html#insert-select" title="13.2.6.1 INSERT ... SELECT Syntax"><code class="literal">INSERT INTO ...
          SELECT</code></a> standard SQL syntax, which is basically the
          same thing. See <a class="xref" href="sql-syntax.html#insert-select" title="13.2.6.1 INSERT ... SELECT Syntax">Section 13.2.6.1, “INSERT ... SELECT Syntax”</a>. For example:
        </p><pre data-lang="sql" class="programlisting">
INSERT INTO tbl_temp2 (fld_id)
    SELECT tbl_temp1.fld_order_id
    FROM tbl_temp1 WHERE tbl_temp1.fld_order_id &gt; 100;
</pre><p>
          Alternatively, you can use
          <a class="link" href="sql-syntax.html#select-into" title="13.2.10.1 SELECT ... INTO Syntax"><code class="literal">SELECT ... INTO
          OUTFILE</code></a> or
          <a class="link" href="sql-syntax.html#create-table" title="13.1.18 CREATE TABLE Syntax"><code class="literal">CREATE TABLE ...
          SELECT</code></a>.
        </p><p>
          You can use <a class="link" href="sql-syntax.html#select" title="13.2.10 SELECT Syntax"><code class="literal">SELECT ...
          INTO</code></a> with user-defined variables. The same syntax
          can also be used inside stored routines using cursors and
          local variables. See <a class="xref" href="sql-syntax.html#select-into" title="13.2.10.1 SELECT ... INTO Syntax">Section 13.2.10.1, “SELECT ... INTO Syntax”</a>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="ansi-diff-update"></a>1.8.2.2 UPDATE Differences</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660978176"></a><p>
          If you access a column from the table to be updated in an
          expression, <a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE Syntax"><code class="literal">UPDATE</code></a> uses the
          current value of the column. The second assignment in the
          following statement sets <code class="literal">col2</code> to the
          current (updated) <code class="literal">col1</code> value, not the
          original <code class="literal">col1</code> value. The result is that
          <code class="literal">col1</code> and <code class="literal">col2</code> have the
          same value. This behavior differs from standard SQL.
        </p><pre data-lang="sql" class="programlisting">
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
</pre>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="ansi-diff-foreign-keys"></a>1.8.2.3 Foreign Key Differences</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660969392"></a><a class="indexterm" name="idm139899660968320"></a><p>
          The MySQL implementation of foreign keys differs from the SQL
          standard in the following key respects:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              If there are several rows in the parent table that have
              the same referenced key value,
              <a class="link" href="innodb-storage-engine.html" title="Chapter 15 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> acts in foreign key
              checks as if the other parent rows with the same key value
              do not exist. For example, if you have defined a
              <code class="literal">RESTRICT</code> type constraint, and there is
              a child row with several parent rows,
              <code class="literal">InnoDB</code> does not permit the deletion of
              any of those parent rows.
            </p><p>
              <code class="literal">InnoDB</code> performs cascading operations
              through a depth-first algorithm, based on records in the
              indexes corresponding to the foreign key constraints.
            </p></li><li class="listitem"><p>
              A <code class="literal">FOREIGN KEY</code> constraint that
              references a non-<code class="literal">UNIQUE</code> key is not
              standard SQL but rather an
              <a class="link" href="innodb-storage-engine.html" title="Chapter 15 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> extension.
            </p></li><li class="listitem"><p>
              If <code class="literal">ON UPDATE CASCADE</code> or <code class="literal">ON
              UPDATE SET NULL</code> recurses to update the
              <span class="emphasis"><em>same table</em></span> it has previously updated
              during the same cascade, it acts like
              <code class="literal">RESTRICT</code>. This means that you cannot
              use self-referential <code class="literal">ON UPDATE CASCADE</code>
              or <code class="literal">ON UPDATE SET NULL</code> operations. This
              is to prevent infinite loops resulting from cascaded
              updates. A self-referential <code class="literal">ON DELETE SET
              NULL</code>, on the other hand, is possible, as is a
              self-referential <code class="literal">ON DELETE CASCADE</code>.
              Cascading operations may not be nested more than 15 levels
              deep.
            </p></li><li class="listitem"><p>
              In an SQL statement that inserts, deletes, or updates many
              rows, foreign key constraints (like unique constraints)
              are checked row-by-row. When performing foreign key
              checks, <a class="link" href="innodb-storage-engine.html" title="Chapter 15 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> sets shared
              row-level locks on child or parent records that it must
              examine. MySQL checks foreign key constraints immediately;
              the check is not deferred to transaction commit. According
              to the SQL standard, the default behavior should be
              deferred checking. That is, constraints are only checked
              after the <span class="emphasis"><em>entire SQL statement</em></span> has
              been processed. This means that it is not possible to
              delete a row that refers to itself using a foreign key.
</p></li></ul>
</div>
<p>
          For information about how the
          <a class="link" href="innodb-storage-engine.html" title="Chapter 15 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a> storage engine handles
          foreign keys, see
          <a class="xref" href="innodb-storage-engine.html#innodb-foreign-key-constraints" title="15.8.1.6 InnoDB and FOREIGN KEY Constraints">Section 15.8.1.6, “InnoDB and FOREIGN KEY Constraints”</a>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="ansi-diff-comments"></a>1.8.2.4 '--' as the Start of a Comment</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660943440"></a><a class="indexterm" name="idm139899660941984"></a><p>
          Standard SQL uses the C syntax <code class="literal">/* this is a comment
          */</code> for comments, and MySQL Server supports this
          syntax as well. MySQL also support extensions to this syntax
          that enable MySQL-specific SQL to be embedded in the comment,
          as described in <a class="xref" href="language-structure.html#comments" title="9.6 Comment Syntax">Section 9.6, “Comment Syntax”</a>.
        </p><p>
          Standard SQL uses <span class="quote">“<span class="quote"><code class="option">--</code></span>”</span> as a
          start-comment sequence. MySQL Server uses <code class="literal">#</code>
          as the start comment character. MySQL Server also supports a
          variant of the <code class="literal">--</code> comment style. That is,
          the <code class="literal">--</code> start-comment sequence must be
          followed by a space (or by a control character such as a
          newline). The space is required to prevent problems with
          automatically generated SQL queries that use constructs such
          as the following, where we automatically insert the value of
          the payment for <code class="literal">payment</code>:
        </p><pre data-lang="sql" class="programlisting">
UPDATE account SET credit=credit-payment
</pre><p>
          Consider about what happens if <code class="literal">payment</code> has
          a negative value such as <code class="literal">-1</code>:
        </p><pre data-lang="sql" class="programlisting">
UPDATE account SET credit=credit--1
</pre><p>
          <code class="literal">credit--1</code> is a valid expression in SQL, but
          <code class="literal">--</code> is interpreted as the start of a
          comment, part of the expression is discarded. The result is a
          statement that has a completely different meaning than
          intended:
        </p><pre data-lang="sql" class="programlisting">
UPDATE account SET credit=credit
</pre><p>
          The statement produces no change in value at all. This
          illustrates that permitting comments to start with
          <code class="literal">--</code> can have serious consequences.
        </p><p>
          Using our implementation requires a space following the
          <code class="literal">--</code> for it to be recognized as a
          start-comment sequence in MySQL Server. Therefore,
          <code class="literal">credit--1</code> is safe to use.
        </p><p>
          Another safe feature is that the <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Tool"><span class="command"><strong>mysql</strong></span></a>
          command-line client ignores lines that start with
          <code class="literal">--</code>.
</p>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="constraints"></a>1.8.3 How MySQL Deals with Constraints</h3>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#constraint-primary-key">1.8.3.1 PRIMARY KEY and UNIQUE Index Constraints</a></span></dt><dt><span class="section"><a href="introduction.html#constraint-foreign-key">1.8.3.2 FOREIGN KEY Constraints</a></span></dt><dt><span class="section"><a href="introduction.html#constraint-invalid-data">1.8.3.3 Constraints on Invalid Data</a></span></dt><dt><span class="section"><a href="introduction.html#constraint-enum">1.8.3.4 ENUM and SET Constraints</a></span></dt></dl>
</div>
<a class="indexterm" name="idm139899660920272"></a><p>
        MySQL enables you to work both with transactional tables that
        permit rollback and with nontransactional tables that do not.
        Because of this, constraint handling is a bit different in MySQL
        than in other DBMSs. We must handle the case when you have
        inserted or updated a lot of rows in a nontransactional table
        for which changes cannot be rolled back when an error occurs.
      </p><p>
        The basic philosophy is that MySQL Server tries to produce an
        error for anything that it can detect while parsing a statement
        to be executed, and tries to recover from any errors that occur
        while executing the statement. We do this in most cases, but not
        yet for all.
      </p><p>
        The options MySQL has when an error occurs are to stop the
        statement in the middle or to recover as well as possible from
        the problem and continue. By default, the server follows the
        latter course. This means, for example, that the server may
        coerce invalid values to the closest valid values.
      </p><p>
        Several SQL mode options are available to provide greater
        control over handling of bad data values and whether to continue
        statement execution or abort when errors occur. Using these
        options, you can configure MySQL Server to act in a more
        traditional fashion that is like other DBMSs that reject
        improper input. The SQL mode can be set globally at server
        startup to affect all clients. Individual clients can set the
        SQL mode at runtime, which enables each client to select the
        behavior most appropriate for its requirements. See
        <a class="xref" href="server-administration.html#sql-mode" title="5.1.8 Server SQL Modes">Section 5.1.8, “Server SQL Modes”</a>.
      </p><p>
        The following sections describe how MySQL Server handles
        different types of constraints.
</p>
<div class="section">

<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="constraint-primary-key"></a>1.8.3.1 PRIMARY KEY and UNIQUE Index Constraints</h4>
</div>
</div>
</div>
<a class="indexterm" name="idm139899660913248"></a><a class="indexterm" name="idm139899660911792"></a><a class="indexterm" name="idm139899660910304"></a><p>
          Normally, errors occur for data-change statements (such as
          <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a> or
          <a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE Syntax"><code class="literal">UPDATE</code></a>) that would violate
          primary-key, unique-key, or foreign-key constraints. If you
          are using a transactional storage engine such as
          <code class="literal">InnoDB</code>, MySQL automatically rolls back the
          statement. If you are using a nontransactional storage engine,
          MySQL stops processing the statement at the row for which the
          error occurred and leaves any remaining rows unprocessed.
        </p><p>
          MySQL supports an <code class="literal">IGNORE</code> keyword for
          <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a>,
          <a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE Syntax"><code class="literal">UPDATE</code></a>, and so forth. If you
          use it, MySQL ignores primary-key or unique-key violations and
          continues processing with the next row. See the section for
          the statement that you are using (<a class="xref" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax">Section 13.2.6, “INSERT Syntax”</a>,
          <a class="xref" href="sql-syntax.html#update" title="13.2.12 UPDATE Syntax">Section 13.2.12, “UPDATE Syntax”</a>, and so forth).
        </p><p>
          You can get information about the number of rows actually
          inserted or updated with the
          <a class="link" href="connectors-apis.html#mysql-info" title="27.7.7.36 mysql_info()"><code class="literal">mysql_info()</code></a> C API function.
          You can also use the <a class="link" href="sql-syntax.html#show-warnings" title="13.7.6.40 SHOW WARNINGS Syntax"><code class="literal">SHOW
          WARNINGS</code></a> statement. See
          <a class="xref" href="connectors-apis.html#mysql-info" title="27.7.7.36 mysql_info()">Section 27.7.7.36, “mysql_info()”</a>, and
          <a class="xref" href="sql-syntax.html#show-warnings" title="13.7.6.40 SHOW WARNINGS Syntax">Section 13.7.6.40, “SHOW WARNINGS Syntax”</a>.
        </p><p>
          Only <code class="literal">InnoDB</code> tables support foreign keys.
          See <a class="xref" href="innodb-storage-engine.html#innodb-foreign-key-constraints" title="15.8.1.6 InnoDB and FOREIGN KEY Constraints">Section 15.8.1.6, “InnoDB and FOREIGN KEY Constraints”</a>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="constraint-foreign-key"></a>1.8.3.2 FOREIGN KEY Constraints</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660891856"></a><p>
          Foreign keys let you cross-reference related data across
          tables, and
          <a class="link" href="glossary.html#glos_foreign_key_constraint" title="FOREIGN KEY constraint">foreign key
          constraints</a> help keep this spread-out data consistent.
        </p><p>
          MySQL supports <code class="literal">ON UPDATE</code> and <code class="literal">ON
          DELETE</code> foreign key references in
          <a class="link" href="sql-syntax.html#create-table" title="13.1.18 CREATE TABLE Syntax"><code class="literal">CREATE TABLE</code></a> and
          <a class="link" href="sql-syntax.html#alter-table" title="13.1.8 ALTER TABLE Syntax"><code class="literal">ALTER TABLE</code></a> statements. The
          available referential actions are <code class="literal">RESTRICT</code>
          (the default), <code class="literal">CASCADE</code>, <code class="literal">SET
          NULL</code>, and <code class="literal">NO ACTION</code>.
        </p><p>
          <code class="literal">SET DEFAULT</code> is also supported by the MySQL
          Server but is currently rejected as invalid by
          <a class="link" href="innodb-storage-engine.html" title="Chapter 15 The InnoDB Storage Engine"><code class="literal">InnoDB</code></a>. Since MySQL does not
          support deferred constraint checking, <code class="literal">NO
          ACTION</code> is treated as <code class="literal">RESTRICT</code>.
          For the exact syntax supported by MySQL for foreign keys, see
          <a class="xref" href="sql-syntax.html#create-table-foreign-keys" title="13.1.18.6 Using FOREIGN KEY Constraints">Section 13.1.18.6, “Using FOREIGN KEY Constraints”</a>.
        </p><p>
          <code class="literal">MATCH FULL</code>, <code class="literal">MATCH
          PARTIAL</code>, and <code class="literal">MATCH SIMPLE</code> are
          allowed, but their use should be avoided, as they cause the
          MySQL Server to ignore any <code class="literal">ON DELETE</code> or
          <code class="literal">ON UPDATE</code> clause used in the same
          statement. <code class="literal">MATCH</code> options do not have any
          other effect in MySQL, which in effect enforces <code class="literal">MATCH
          SIMPLE</code> semantics full-time.
        </p><p>
          MySQL requires that foreign key columns be indexed; if you
          create a table with a foreign key constraint but no index on a
          given column, an index is created.
        </p><p>
          You can obtain information about foreign keys from the
          <a class="link" href="information-schema.html#key-column-usage-table" title="24.10 The INFORMATION_SCHEMA KEY_COLUMN_USAGE Table"><code class="literal">INFORMATION_SCHEMA.KEY_COLUMN_USAGE</code></a>
          table. An example of a query against this table is shown here:
        </p><pre data-lang="sql" class="programlisting">
mysql&gt; <strong class="userinput"><code>SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME</code></strong>
     &gt; <strong class="userinput"><code>FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE</code></strong>
     &gt; <strong class="userinput"><code>WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;</code></strong>
+--------------+---------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME    | COLUMN_NAME | CONSTRAINT_NAME |
+--------------+---------------+-------------+-----------------+
| fk1          | myuser        | myuser_id   | f               |
| fk1          | product_order | customer_id | f2              |
| fk1          | product_order | product_id  | f1              |
+--------------+---------------+-------------+-----------------+
3 rows in set (0.01 sec)
</pre><p>
          Information about foreign keys on <code class="literal">InnoDB</code>
          tables can also be found in the
          <a class="link" href="information-schema.html#innodb-foreign-table" title="24.33.20 The INFORMATION_SCHEMA INNODB_FOREIGN Table"><code class="literal">INNODB_FOREIGN</code></a> and
          <a class="link" href="information-schema.html#innodb-foreign-cols-table" title="24.33.21 The INFORMATION_SCHEMA INNODB_FOREIGN_COLS Table"><code class="literal">INNODB_FOREIGN_COLS</code></a> tables, in
          the <code class="literal">INFORMATION_SCHEMA</code> database.
        </p><p>
          Only <code class="literal">InnoDB</code> tables support foreign keys.
          See <a class="xref" href="innodb-storage-engine.html#innodb-foreign-key-constraints" title="15.8.1.6 InnoDB and FOREIGN KEY Constraints">Section 15.8.1.6, “InnoDB and FOREIGN KEY Constraints”</a>, for
          information specific to foreign key support in
          <code class="literal">InnoDB</code>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="constraint-invalid-data"></a>1.8.3.3 Constraints on Invalid Data</h4>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660856400"></a><a class="indexterm" name="idm139899660854944"></a><a class="indexterm" name="idm139899660853456"></a><a class="indexterm" name="idm139899660851968"></a><a class="indexterm" name="idm139899660850480"></a><p>
          By default, MySQL is forgiving of invalid or improper data
          values and coerces them to valid values for data entry.
          However, you can enable strict SQL mode to select more
          traditional treatment of bad values such that the server
          rejects them and aborts the statement in which they occur. See
          <a class="xref" href="server-administration.html#sql-mode" title="5.1.8 Server SQL Modes">Section 5.1.8, “Server SQL Modes”</a>.
        </p><p>
          This section describes the default (forgiving) behavior of
          MySQL, as well as the strict SQL mode and how it differs.
        </p><p>
          If you are not using strict mode, then whenever you insert an
          <span class="quote">“<span class="quote">incorrect</span>”</span> value into a column, such as a
          <code class="literal">NULL</code> into a <code class="literal">NOT NULL</code>
          column or a too-large numeric value into a numeric column,
          MySQL sets the column to the <span class="quote">“<span class="quote">best possible
          value</span>”</span> instead of producing an error: The following
          rules describe in more detail how this works:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              If you try to store an out of range value into a numeric
              column, MySQL Server instead stores zero, the smallest
              possible value, or the largest possible value, whichever
              is closest to the invalid value.
            </p></li><li class="listitem"><p>
              For strings, MySQL stores either the empty string or as
              much of the string as can be stored in the column.
            </p></li><li class="listitem"><p>
              If you try to store a string that does not start with a
              number into a numeric column, MySQL Server stores 0.
            </p></li><li class="listitem"><p>
              Invalid values for <a class="link" href="data-types.html#enum" title="11.4.4 The ENUM Type"><code class="literal">ENUM</code></a> and
              <a class="link" href="data-types.html#set" title="11.4.5 The SET Type"><code class="literal">SET</code></a> columns are handled as
              described in <a class="xref" href="introduction.html#constraint-enum" title="1.8.3.4 ENUM and SET Constraints">Section 1.8.3.4, “ENUM and SET Constraints”</a>.
            </p></li><li class="listitem"><p>
              MySQL permits you to store certain incorrect date values
              into <a class="link" href="data-types.html#datetime" title="11.3.1 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">DATE</code></a> and
              <a class="link" href="data-types.html#datetime" title="11.3.1 The DATE, DATETIME, and TIMESTAMP Types"><code class="literal">DATETIME</code></a> columns (such as
              <code class="literal">'2000-02-31'</code> or
              <code class="literal">'2000-02-00'</code>). In this case, when an
              application has not enabled strict SQL mode, it up to the
              application to validate the dates before storing them. If
              MySQL can store a date value and retrieve exactly the same
              value, MySQL stores it as given. If the date is totally
              wrong (outside the server's ability to store it), the
              special <span class="quote">“<span class="quote">zero</span>”</span> date value
              <code class="literal">'0000-00-00'</code> is stored in the column
              instead.
            </p></li><li class="listitem"><p>
              If you try to store <code class="literal">NULL</code> into a column
              that doesn't take <code class="literal">NULL</code> values, an error
              occurs for single-row
              <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a> statements. For
              multiple-row <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a>
              statements or for
              <a class="link" href="sql-syntax.html#insert-select" title="13.2.6.1 INSERT ... SELECT Syntax"><code class="literal">INSERT INTO
              ... SELECT</code></a> statements, MySQL Server stores the
              implicit default value for the column data type. In
              general, this is <code class="literal">0</code> for numeric types,
              the empty string (<code class="literal">''</code>) for string types,
              and the <span class="quote">“<span class="quote">zero</span>”</span> value for date and time types.
              Implicit default values are discussed in
              <a class="xref" href="data-types.html#data-type-defaults" title="11.7 Data Type Default Values">Section 11.7, “Data Type Default Values”</a>.
            </p></li><li class="listitem"><p>
              If an <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a> statement
              specifies no value for a column, MySQL inserts its default
              value if the column definition includes an explicit
              <code class="literal">DEFAULT</code> clause. If the definition has
              no such <code class="literal">DEFAULT</code> clause, MySQL inserts
              the implicit default value for the column data type.
</p></li></ul>
</div>
<p>
          The reason for using the preceding rules in nonstrict mode is
          that we can't check these conditions until the statement has
          begun executing. We can't just roll back if we encounter a
          problem after updating a few rows, because the storage engine
          may not support rollback. The option of terminating the
          statement is not that good; in this case, the update would be
          <span class="quote">“<span class="quote">half done,</span>”</span> which is probably the worst possible
          scenario. In this case, it is better to <span class="quote">“<span class="quote">do the best you
          can</span>”</span> and then continue as if nothing happened.
        </p><p>
          You can select stricter treatment of input values by using the
          <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a> or
          <a class="link" href="server-administration.html#sqlmode_strict_all_tables"><code class="literal">STRICT_ALL_TABLES</code></a> SQL modes:
        </p><pre data-lang="sql" class="programlisting">
SET sql_mode = 'STRICT_TRANS_TABLES';
SET sql_mode = 'STRICT_ALL_TABLES';
</pre><p>
          <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a> enables
          strict mode for transactional storage engines, and also to
          some extent for nontransactional engines. It works like this:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              For transactional storage engines, bad data values
              occurring anywhere in a statement cause the statement to
              abort and roll back.
            </p></li><li class="listitem"><p>
              For nontransactional storage engines, a statement aborts
              if the error occurs in the first row to be inserted or
              updated. (When the error occurs in the first row, the
              statement can be aborted to leave the table unchanged,
              just as for a transactional table.) Errors in rows after
              the first do not abort the statement, because the table
              has already been changed by the first row. Instead, bad
              data values are adjusted and result in warnings rather
              than errors. In other words, with
              <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a>, a
              wrong value causes MySQL to roll back all updates done so
              far, if that can be done without changing the table. But
              once the table has been changed, further errors result in
              adjustments and warnings.
</p></li></ul>
</div>
<p>
          For even stricter checking, enable
          <a class="link" href="server-administration.html#sqlmode_strict_all_tables"><code class="literal">STRICT_ALL_TABLES</code></a>. This is
          the same as
          <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a> except
          that for nontransactional storage engines, errors abort the
          statement even for bad data in rows following the first row.
          This means that if an error occurs partway through a
          multiple-row insert or update for a nontransactional table, a
          partial update results. Earlier rows are inserted or updated,
          but those from the point of the error on are not. To avoid
          this for nontransactional tables, either use single-row
          statements or else use
          <a class="link" href="server-administration.html#sqlmode_strict_trans_tables"><code class="literal">STRICT_TRANS_TABLES</code></a> if
          conversion warnings rather than errors are acceptable. To
          avoid problems in the first place, do not use MySQL to check
          column content. It is safest (and often faster) to let the
          application ensure that it passes only valid values to the
          database.
        </p><p>
          With either of the strict mode options, you can cause errors
          to be treated as warnings by using
          <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT
          IGNORE</code></a> or <code class="literal">UPDATE IGNORE</code> rather
          than <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT</code></a> or
          <a class="link" href="sql-syntax.html#update" title="13.2.12 UPDATE Syntax"><code class="literal">UPDATE</code></a> without
          <code class="literal">IGNORE</code>.
</p>
</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h4 class="title"><a name="constraint-enum"></a>1.8.3.4 ENUM and SET Constraints</h4>

</div>

</div>

</div>
<p>
          <a class="link" href="data-types.html#enum" title="11.4.4 The ENUM Type"><code class="literal">ENUM</code></a> and
          <a class="link" href="data-types.html#set" title="11.4.5 The SET Type"><code class="literal">SET</code></a> columns provide an
          efficient way to define columns that can contain only a given
          set of values. See <a class="xref" href="data-types.html#enum" title="11.4.4 The ENUM Type">Section 11.4.4, “The ENUM Type”</a>, and
          <a class="xref" href="data-types.html#set" title="11.4.5 The SET Type">Section 11.4.5, “The SET Type”</a>.
        </p><p>
          With strict mode enabled (see <a class="xref" href="server-administration.html#sql-mode" title="5.1.8 Server SQL Modes">Section 5.1.8, “Server SQL Modes”</a>), the
          definition of a <a class="link" href="data-types.html#enum" title="11.4.4 The ENUM Type"><code class="literal">ENUM</code></a> or
          <a class="link" href="data-types.html#set" title="11.4.5 The SET Type"><code class="literal">SET</code></a> column acts as a constraint
          on values entered into the column. An error occurs for values
          that do not satisfy these conditions:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
              An <a class="link" href="data-types.html#enum" title="11.4.4 The ENUM Type"><code class="literal">ENUM</code></a> value must be one
              of those listed in the column definition, or the internal
              numeric equivalent thereof. The value cannot be the error
              value (that is, 0 or the empty string). For a column
              defined as
              <a class="link" href="data-types.html#enum" title="11.4.4 The ENUM Type"><code class="literal">ENUM('a','b','c')</code></a>, values
              such as <code class="literal">''</code>, <code class="literal">'d'</code>, or
              <code class="literal">'ax'</code> are invalid and are rejected.
            </p></li><li class="listitem"><p>
              A <a class="link" href="data-types.html#set" title="11.4.5 The SET Type"><code class="literal">SET</code></a> value must be the
              empty string or a value consisting only of the values
              listed in the column definition separated by commas. For a
              column defined as
              <a class="link" href="data-types.html#set" title="11.4.5 The SET Type"><code class="literal">SET('a','b','c')</code></a>, values
              such as <code class="literal">'d'</code> or
              <code class="literal">'a,b,c,d'</code> are invalid and are rejected.
</p></li></ul>
</div>
<p>
          Errors for invalid values can be suppressed in strict mode if
          you use <a class="link" href="sql-syntax.html#insert" title="13.2.6 INSERT Syntax"><code class="literal">INSERT
          IGNORE</code></a> or <code class="literal">UPDATE IGNORE</code>. In this
          case, a warning is generated rather than an error. For
          <a class="link" href="data-types.html#enum" title="11.4.4 The ENUM Type"><code class="literal">ENUM</code></a>, the value is inserted as
          the error member (<code class="literal">0</code>). For
          <a class="link" href="data-types.html#set" title="11.4.5 The SET Type"><code class="literal">SET</code></a>, the value is inserted as
          given except that any invalid substrings are deleted. For
          example, <code class="literal">'a,x,b,y'</code> results in a value of
          <code class="literal">'a,b'</code>.
</p>
</div>

</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h2 class="title" style="clear: both"><a name="credits"></a>1.9 Credits</h2>

</div>

</div>

</div>
<div class="toc">
<dl class="toc"><dt><span class="section"><a href="introduction.html#contributors">1.9.1 Contributors to MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#documenters-translators">1.9.2 Documenters and translators</a></span></dt><dt><span class="section"><a href="introduction.html#packages">1.9.3 Packages that support MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#tools-used-to-create-mysql">1.9.4 Tools that were used to create MySQL</a></span></dt><dt><span class="section"><a href="introduction.html#supporters">1.9.5 Supporters of MySQL</a></span></dt></dl>
</div>
<p>
    The following sections list developers, contributors, and supporters
    that have helped to make MySQL what it is today.
</p>
<div class="section">

<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="contributors"></a>1.9.1 Contributors to MySQL</h3>
</div>
</div>
</div>
<a class="indexterm" name="idm139899660763872"></a><p>
      Although Oracle Corporation and/or its affiliates own all
      copyrights in the <code class="literal">MySQL server</code> and the
      <code class="literal">MySQL manual</code>, we wish to recognize those who
      have made contributions of one kind or another to the
      <code class="literal">MySQL distribution</code>. Contributors are listed
      here, in somewhat random order:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Gianmassimo Vigazzola <code class="email">&lt;<a class="email" href="mailto:qwerg@mbox.vol.it">qwerg@mbox.vol.it</a>&gt;</code> or
          <code class="email">&lt;<a class="email" href="mailto:qwerg@tin.it">qwerg@tin.it</a>&gt;</code>
        </p><p>
          The initial port to Win32/NT.
        </p></li><li class="listitem"><p>
          Per Eric Olsson
        </p><p>
          For constructive criticism and real testing of the dynamic
          record format.
        </p></li><li class="listitem"><p>
          Irena Pancirov <code class="email">&lt;<a class="email" href="mailto:irena@mail.yacc.it">irena@mail.yacc.it</a>&gt;</code>
        </p><p>
          Win32 port with Borland compiler.
          <code class="literal">mysqlshutdown.exe</code> and
          <code class="literal">mysqlwatch.exe</code>.
        </p></li><li class="listitem"><p>
          David J. Hughes
        </p><p>
          For the effort to make a shareware SQL database. At TcX, the
          predecessor of MySQL AB, we started with
          <code class="literal">mSQL</code>, but found that it couldn't satisfy
          our purposes so instead we wrote an SQL interface to our
          application builder Unireg. <a class="link" href="programs.html#mysqladmin" title="4.5.2 mysqladmin — Client for Administering a MySQL Server"><span class="command"><strong>mysqladmin</strong></span></a> and
          <a class="link" href="programs.html#mysql" title="4.5.1 mysql — The MySQL Command-Line Tool"><span class="command"><strong>mysql</strong></span></a> client are programs that were largely
          influenced by their <code class="literal">mSQL</code> counterparts. We
          have put a lot of effort into making the MySQL syntax a
          superset of <code class="literal">mSQL</code>. Many of the API's ideas
          are borrowed from <code class="literal">mSQL</code> to make it easy to
          port free <code class="literal">mSQL</code> programs to the MySQL API.
          The MySQL software doesn't contain any code from
          <code class="literal">mSQL</code>. Two files in the distribution
          (<code class="filename">client/insert_test.c</code> and
          <code class="filename">client/select_test.c</code>) are based on the
          corresponding (noncopyrighted) files in the
          <code class="literal">mSQL</code> distribution, but are modified as
          examples showing the changes necessary to convert code from
          <code class="literal">mSQL</code> to MySQL Server.
          (<code class="literal">mSQL</code> is copyrighted David J. Hughes.)
        </p></li><li class="listitem"><p>
          Patrick Lynch
        </p><p>
          For helping us acquire <a class="ulink" href="http://www.mysql.com/" target="_top">http://www.mysql.com/</a>.
        </p></li><li class="listitem"><p>
          Fred Lindberg
        </p><p>
          For setting up qmail to handle the MySQL mailing list and for
          the incredible help we got in managing the MySQL mailing
          lists.
        </p></li><li class="listitem"><p>
          Igor Romanenko <code class="email">&lt;<a class="email" href="mailto:igor@frog.kiev.ua">igor@frog.kiev.ua</a>&gt;</code>
        </p><p>
          <a class="link" href="programs.html#mysqldump" title="4.5.4 mysqldump — A Database Backup Program"><span class="command"><strong>mysqldump</strong></span></a> (previously
          <code class="literal">msqldump</code>, but ported and enhanced by
          Monty).
        </p></li><li class="listitem"><p>
          Yuri Dario
        </p><p>
          For keeping up and extending the MySQL OS/2 port.
        </p></li><li class="listitem"><p>
          Tim Bunce
        </p><p>
          Author of <span class="command"><strong>mysqlhotcopy</strong></span>.
        </p></li><li class="listitem"><p>
          Zarko Mocnik <code class="email">&lt;<a class="email" href="mailto:zarko.mocnik@dem.si">zarko.mocnik@dem.si</a>&gt;</code>
        </p><p>
          Sorting for Slovenian language.
        </p></li><li class="listitem"><p>
          "TAMITO" <code class="email">&lt;<a class="email" href="mailto:tommy@valley.ne.jp">tommy@valley.ne.jp</a>&gt;</code>
        </p><p>
          The <code class="literal">_MB</code> character set macros and the ujis
          and sjis character sets.
        </p></li><li class="listitem"><p>
          Joshua Chamas <code class="email">&lt;<a class="email" href="mailto:joshua@chamas.com">joshua@chamas.com</a>&gt;</code>
        </p><p>
          Base for concurrent insert, extended date syntax, debugging on
          NT, and answering on the MySQL mailing list.
        </p></li><li class="listitem"><p>
          Yves Carlier <code class="email">&lt;<a class="email" href="mailto:Yves.Carlier@rug.ac.be">Yves.Carlier@rug.ac.be</a>&gt;</code>
        </p><p>
          <span class="command"><strong>mysqlaccess</strong></span>, a program to show the access
          rights for a user.
        </p></li><li class="listitem"><p>
          Rhys Jones <code class="email">&lt;<a class="email" href="mailto:rhys@wales.com">rhys@wales.com</a>&gt;</code> (And GWE Technologies
          Limited)
        </p><p>
          For one of the early JDBC drivers.
        </p></li><li class="listitem"><p>
          Dr Xiaokun Kelvin ZHU <code class="email">&lt;<a class="email" href="mailto:X.Zhu@brad.ac.uk">X.Zhu@brad.ac.uk</a>&gt;</code>
        </p><p>
          Further development of one of the early JDBC drivers and other
          MySQL-related Java tools.
        </p></li><li class="listitem"><p>
          James Cooper <code class="email">&lt;<a class="email" href="mailto:pixel@organic.com">pixel@organic.com</a>&gt;</code>
        </p><p>
          For setting up a searchable mailing list archive at his site.
        </p></li><li class="listitem"><p>
          Rick Mehalick <code class="email">&lt;<a class="email" href="mailto:Rick_Mehalick@i-o.com">Rick_Mehalick@i-o.com</a>&gt;</code>
        </p><p>
          For <code class="literal">xmysql</code>, a graphical X client for MySQL
          Server.
        </p></li><li class="listitem"><p>
          Doug Sisk <code class="email">&lt;<a class="email" href="mailto:sisk@wix.com">sisk@wix.com</a>&gt;</code>
        </p><p>
          For providing RPM packages of MySQL for Red Hat Linux.
        </p></li><li class="listitem"><p>
          Diemand Alexander V. <code class="email">&lt;<a class="email" href="mailto:axeld@vial.ethz.ch">axeld@vial.ethz.ch</a>&gt;</code>
        </p><p>
          For providing RPM packages of MySQL for Red Hat Linux-Alpha.
        </p></li><li class="listitem"><p>
          Antoni Pamies Olive <code class="email">&lt;<a class="email" href="mailto:toni@readysoft.es">toni@readysoft.es</a>&gt;</code>
        </p><p>
          For providing RPM versions of a lot of MySQL clients for Intel
          and SPARC.
        </p></li><li class="listitem"><p>
          Jay Bloodworth <code class="email">&lt;<a class="email" href="mailto:jay@pathways.sde.state.sc.us">jay@pathways.sde.state.sc.us</a>&gt;</code>
        </p><p>
          For providing RPM versions for MySQL 3.21.
        </p></li><li class="listitem"><p>
          David Sacerdote <code class="email">&lt;<a class="email" href="mailto:davids@secnet.com">davids@secnet.com</a>&gt;</code>
        </p><p>
          Ideas for secure checking of DNS host names.
        </p></li><li class="listitem"><p>
          Wei-Jou Chen <code class="email">&lt;<a class="email" href="mailto:jou@nematic.ieo.nctu.edu.tw">jou@nematic.ieo.nctu.edu.tw</a>&gt;</code>
        </p><p>
          Some support for Chinese(BIG5) characters.
        </p></li><li class="listitem"><p>
          Wei He <code class="email">&lt;<a class="email" href="mailto:hewei@mail.ied.ac.cn">hewei@mail.ied.ac.cn</a>&gt;</code>
        </p><p>
          A lot of functionality for the Chinese(GBK) character set.
        </p></li><li class="listitem"><p>
          Jan Pazdziora <code class="email">&lt;<a class="email" href="mailto:adelton@fi.muni.cz">adelton@fi.muni.cz</a>&gt;</code>
        </p><p>
          Czech sorting order.
        </p></li><li class="listitem"><p>
          Zeev Suraski <code class="email">&lt;<a class="email" href="mailto:bourbon@netvision.net.il">bourbon@netvision.net.il</a>&gt;</code>
        </p><p>
          <a class="link" href="functions.html#function_from-unixtime"><code class="literal">FROM_UNIXTIME()</code></a> time
          formatting, <a class="link" href="functions.html#function_encrypt"><code class="literal">ENCRYPT()</code></a>
          functions, and <span class="command"><strong>bison</strong></span> advisor. Active
          mailing list member.
        </p></li><li class="listitem"><p>
          Luuk de Boer <code class="email">&lt;<a class="email" href="mailto:luuk@wxs.nl">luuk@wxs.nl</a>&gt;</code>
        </p><p>
          Ported (and extended) the benchmark suite to
          <code class="literal">DBI</code>/<code class="literal">DBD</code>. Have been of
          great help with <code class="literal">crash-me</code> and running
          benchmarks. Some new date functions. The
          <span class="command"><strong>mysql_setpermission</strong></span> script.
        </p></li><li class="listitem"><p>
          Alexis Mikhailov <code class="email">&lt;<a class="email" href="mailto:root@medinf.chuvashia.su">root@medinf.chuvashia.su</a>&gt;</code>
        </p><p>
          User-defined functions (UDFs); <a class="link" href="sql-syntax.html#create-function" title="13.1.13 CREATE FUNCTION Syntax"><code class="literal">CREATE
          FUNCTION</code></a> and <a class="link" href="sql-syntax.html#drop-function" title="13.1.24 DROP FUNCTION Syntax"><code class="literal">DROP
          FUNCTION</code></a>.
        </p></li><li class="listitem"><p>
          Andreas F. Bobak <code class="email">&lt;<a class="email" href="mailto:bobak@relog.ch">bobak@relog.ch</a>&gt;</code>
        </p><p>
          The <code class="literal">AGGREGATE</code> extension to user-defined
          functions.
        </p></li><li class="listitem"><p>
          Ross Wakelin <code class="email">&lt;<a class="email" href="mailto:R.Wakelin@march.co.uk">R.Wakelin@march.co.uk</a>&gt;</code>
        </p><p>
          Help to set up InstallShield for MySQL-Win32.
        </p></li><li class="listitem"><p>
          Jethro Wright III <code class="email">&lt;<a class="email" href="mailto:jetman@li.net">jetman@li.net</a>&gt;</code>
        </p><p>
          The <code class="filename">libmysql.dll</code> library.
        </p></li><li class="listitem"><p>
          James Pereria <code class="email">&lt;<a class="email" href="mailto:jpereira@iafrica.com">jpereira@iafrica.com</a>&gt;</code>
        </p><p>
          Mysqlmanager, a Win32 GUI tool for administering MySQL
          Servers.
        </p></li><li class="listitem"><p>
          Curt Sampson <code class="email">&lt;<a class="email" href="mailto:cjs@portal.ca">cjs@portal.ca</a>&gt;</code>
        </p><p>
          Porting of MIT-pthreads to NetBSD/Alpha and NetBSD 1.3/i386.
        </p></li><li class="listitem"><p>
          Martin Ramsch <code class="email">&lt;<a class="email" href="mailto:m.ramsch@computer.org">m.ramsch@computer.org</a>&gt;</code>
        </p><p>
          Examples in the MySQL Tutorial.
        </p></li><li class="listitem"><p>
          Steve Harvey
        </p><p>
          For making <span class="command"><strong>mysqlaccess</strong></span> more secure.
        </p></li><li class="listitem"><p>
          Konark IA-64 Centre of Persistent Systems Private Limited
        </p><p>
          Help with the Win64 port of the MySQL server.
        </p></li><li class="listitem"><p>
          Albert Chin-A-Young.
        </p><p>
          Configure updates for Tru64, large file support and better TCP
          wrappers support.
        </p></li><li class="listitem"><p>
          John Birrell
        </p><p>
          Emulation of <code class="function">pthread_mutex()</code> for OS/2.
        </p></li><li class="listitem"><p>
          Benjamin Pflugmann
        </p><p>
          Extended <code class="literal">MERGE</code> tables to handle
          <code class="literal">INSERTS</code>. Active member on the MySQL mailing
          lists.
        </p></li><li class="listitem"><p>
          Jocelyn Fournier
        </p><p>
          Excellent spotting and reporting innumerable bugs (especially
          in the MySQL 4.1 subquery code).
        </p></li><li class="listitem"><p>
          Marc Liyanage
        </p><p>
          Maintaining the OS X packages and providing invaluable
          feedback on how to create OS X packages.
        </p></li><li class="listitem"><p>
          Robert Rutherford
        </p><p>
          Providing invaluable information and feedback about the QNX
          port.
        </p></li><li class="listitem"><p>
          Previous developers of NDB Cluster
        </p><p>
          Lots of people were involved in various ways summer students,
          master thesis students, employees. In total more than 100
          people so too many to mention here. Notable name is Ataullah
          Dabaghi who up until 1999 contributed around a third of the
          code base. A special thanks also to developers of the AXE
          system which provided much of the architectural foundations
          for NDB Cluster with blocks, signals and crash tracing
          functionality. Also credit should be given to those who
          believed in the ideas enough to allocate of their budgets for
          its development from 1992 to present time.
        </p></li><li class="listitem"><p>
          Google Inc.
        </p><p>
          We wish to recognize Google Inc. for contributions to the
          MySQL distribution: Mark Callaghan's SMP Performance patches
          and other patches.
</p></li></ul>
</div>
<p>
      Other contributors, bugfinders, and testers: James H. Thompson,
      Maurizio Menghini, Wojciech Tryc, Luca Berra, Zarko Mocnik, Wim
      Bonis, Elmar Haneke, <code class="email">&lt;<a class="email" href="mailto:jehamby@lightside">jehamby@lightside</a>&gt;</code>,
      <code class="email">&lt;<a class="email" href="mailto:psmith@BayNetworks.com">psmith@BayNetworks.com</a>&gt;</code>,
      <code class="email">&lt;<a class="email" href="mailto:duane@connect.com.au">duane@connect.com.au</a>&gt;</code>, Ted Deppner
      <code class="email">&lt;<a class="email" href="mailto:ted@psyber.com">ted@psyber.com</a>&gt;</code>, Mike Simons, Jaakko Hyvatti.
    </p><p>
      And lots of bug report/patches from the folks on the mailing list.
    </p><p>
      A big tribute goes to those that help us answer questions on the
      MySQL mailing lists:
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Daniel Koch <code class="email">&lt;<a class="email" href="mailto:dkoch@amcity.com">dkoch@amcity.com</a>&gt;</code>
        </p><p>
          Irix setup.
        </p></li><li class="listitem"><p>
          Luuk de Boer <code class="email">&lt;<a class="email" href="mailto:luuk@wxs.nl">luuk@wxs.nl</a>&gt;</code>
        </p><p>
          Benchmark questions.
        </p></li><li class="listitem"><p>
          Tim Sailer <code class="email">&lt;<a class="email" href="mailto:tps@users.buoy.com">tps@users.buoy.com</a>&gt;</code>
        </p><p>
          <code class="literal">DBD::mysql</code> questions.
        </p></li><li class="listitem"><p>
          Boyd Lynn Gerber <code class="email">&lt;<a class="email" href="mailto:gerberb@zenez.com">gerberb@zenez.com</a>&gt;</code>
        </p><p>
          SCO-related questions.
        </p></li><li class="listitem"><p>
          Richard Mehalick <code class="email">&lt;<a class="email" href="mailto:RM186061@shellus.com">RM186061@shellus.com</a>&gt;</code>
        </p><p>
          <code class="literal">xmysql</code>-related questions and basic
          installation questions.
        </p></li><li class="listitem"><p>
          Zeev Suraski <code class="email">&lt;<a class="email" href="mailto:bourbon@netvision.net.il">bourbon@netvision.net.il</a>&gt;</code>
        </p><p>
          Apache module configuration questions (log &amp; auth),
          PHP-related questions, SQL syntax-related questions and other
          general questions.
        </p></li><li class="listitem"><p>
          Francesc Guasch <code class="email">&lt;<a class="email" href="mailto:frankie@citel.upc.es">frankie@citel.upc.es</a>&gt;</code>
        </p><p>
          General questions.
        </p></li><li class="listitem"><p>
          Jonathan J Smith <code class="email">&lt;<a class="email" href="mailto:jsmith@wtp.net">jsmith@wtp.net</a>&gt;</code>
        </p><p>
          Questions pertaining to OS-specifics with Linux, SQL syntax,
          and other things that might need some work.
        </p></li><li class="listitem"><p>
          David Sklar <code class="email">&lt;<a class="email" href="mailto:sklar@student.net">sklar@student.net</a>&gt;</code>
        </p><p>
          Using MySQL from PHP and Perl.
        </p></li><li class="listitem"><p>
          Alistair MacDonald <code class="email">&lt;<a class="email" href="mailto:A.MacDonald@uel.ac.uk">A.MacDonald@uel.ac.uk</a>&gt;</code>
        </p><p>
          Is flexible and can handle Linux and perhaps HP-UX.
        </p></li><li class="listitem"><p>
          John Lyon <code class="email">&lt;<a class="email" href="mailto:jlyon@imag.net">jlyon@imag.net</a>&gt;</code>
        </p><p>
          Questions about installing MySQL on Linux systems, using
          either <code class="filename">.rpm</code> files or compiling from
          source.
        </p></li><li class="listitem"><p>
          Lorvid Ltd. <code class="email">&lt;<a class="email" href="mailto:lorvid@WOLFENET.com">lorvid@WOLFENET.com</a>&gt;</code>
        </p><p>
          Simple billing/license/support/copyright issues.
        </p></li><li class="listitem"><p>
          Patrick Sherrill <code class="email">&lt;<a class="email" href="mailto:patrick@coconet.com">patrick@coconet.com</a>&gt;</code>
        </p><p>
          ODBC and VisualC++ interface questions.
        </p></li><li class="listitem"><p>
          Randy Harmon <code class="email">&lt;<a class="email" href="mailto:rjharmon@uptimecomputers.com">rjharmon@uptimecomputers.com</a>&gt;</code>
        </p><p>
          <code class="literal">DBD</code>, Linux, some SQL syntax questions.
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="documenters-translators"></a>1.9.2 Documenters and translators</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660626528"></a><a class="indexterm" name="idm139899660625072"></a><p>
      The following people have helped us with writing the MySQL
      documentation and translating the documentation or error messages
      in MySQL.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Paul DuBois
        </p><p>
          Ongoing help with making this manual correct and
          understandable. That includes rewriting Monty's and David's
          attempts at English into English as other people know it.
        </p></li><li class="listitem"><p>
          Kim Aldale
        </p><p>
          Helped to rewrite Monty's and David's early attempts at
          English into English.
        </p></li><li class="listitem"><p>
          Michael J. Miller Jr.
          <code class="email">&lt;<a class="email" href="mailto:mke@terrapin.turbolift.com">mke@terrapin.turbolift.com</a>&gt;</code>
        </p><p>
          For the first MySQL manual. And a lot of spelling/language
          fixes for the FAQ (that turned into the MySQL manual a long
          time ago).
        </p></li><li class="listitem"><p>
          Yan Cailin
        </p><p>
          First translator of the MySQL Reference Manual into simplified
          Chinese in early 2000 on which the Big5 and HK coded versions
          were based.
        </p></li><li class="listitem"><p>
          Jay Flaherty <code class="email">&lt;<a class="email" href="mailto:fty@mediapulse.com">fty@mediapulse.com</a>&gt;</code>
        </p><p>
          Big parts of the Perl
          <code class="literal">DBI</code>/<code class="literal">DBD</code> section in the
          manual.
        </p></li><li class="listitem"><p>
          Paul Southworth <code class="email">&lt;<a class="email" href="mailto:pauls@etext.org">pauls@etext.org</a>&gt;</code>, Ray Loyzaga
          <code class="email">&lt;<a class="email" href="mailto:yar@cs.su.oz.au">yar@cs.su.oz.au</a>&gt;</code>
        </p><p>
          Proof-reading of the Reference Manual.
        </p></li><li class="listitem"><p>
          Therrien Gilbert <code class="email">&lt;<a class="email" href="mailto:gilbert@ican.net">gilbert@ican.net</a>&gt;</code>, Jean-Marc
          Pouyot <code class="email">&lt;<a class="email" href="mailto:jmp@scalaire.fr">jmp@scalaire.fr</a>&gt;</code>
        </p><p>
          French error messages.
        </p></li><li class="listitem"><p>
          Petr Snajdr, <code class="email">&lt;<a class="email" href="mailto:snajdr@pvt.net">snajdr@pvt.net</a>&gt;</code>
        </p><p>
          Czech error messages.
        </p></li><li class="listitem"><p>
          Jaroslaw Lewandowski <code class="email">&lt;<a class="email" href="mailto:jotel@itnet.com.pl">jotel@itnet.com.pl</a>&gt;</code>
        </p><p>
          Polish error messages.
        </p></li><li class="listitem"><p>
          Miguel Angel Fernandez Roiz
        </p><p>
          Spanish error messages.
        </p></li><li class="listitem"><p>
          Roy-Magne Mo <code class="email">&lt;<a class="email" href="mailto:rmo@www.hivolda.no">rmo@www.hivolda.no</a>&gt;</code>
        </p><p>
          Norwegian error messages and testing of MySQL 3.21.xx.
        </p></li><li class="listitem"><p>
          Timur I. Bakeyev <code class="email">&lt;<a class="email" href="mailto:root@timur.tatarstan.ru">root@timur.tatarstan.ru</a>&gt;</code>
        </p><p>
          Russian error messages.
        </p></li><li class="listitem"><p>
          <code class="email">&lt;<a class="email" href="mailto:brenno@dewinter.com">brenno@dewinter.com</a>&gt;</code> &amp; Filippo Grassilli
          <code class="email">&lt;<a class="email" href="mailto:phil@hyppo.com">phil@hyppo.com</a>&gt;</code>
        </p><p>
          Italian error messages.
        </p></li><li class="listitem"><p>
          Dirk Munzinger <code class="email">&lt;<a class="email" href="mailto:dirk@trinity.saar.de">dirk@trinity.saar.de</a>&gt;</code>
        </p><p>
          German error messages.
        </p></li><li class="listitem"><p>
          Billik Stefan <code class="email">&lt;<a class="email" href="mailto:billik@sun.uniag.sk">billik@sun.uniag.sk</a>&gt;</code>
        </p><p>
          Slovak error messages.
        </p></li><li class="listitem"><p>
          Stefan Saroiu <code class="email">&lt;<a class="email" href="mailto:tzoompy@cs.washington.edu">tzoompy@cs.washington.edu</a>&gt;</code>
        </p><p>
          Romanian error messages.
        </p></li><li class="listitem"><p>
          Peter Feher
        </p><p>
          Hungarian error messages.
        </p></li><li class="listitem"><p>
          Roberto M. Serqueira
        </p><p>
          Portuguese error messages.
        </p></li><li class="listitem"><p>
          Carsten H. Pedersen
        </p><p>
          Danish error messages.
        </p></li><li class="listitem"><p>
          Arjen Lentz
        </p><p>
          Dutch error messages, completing earlier partial translation
          (also work on consistency and spelling).
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="packages"></a>1.9.3 Packages that support MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660587664"></a><a class="indexterm" name="idm139899660586208"></a><p>
      The following is a list of creators/maintainers of some of the
      most important API/packages/applications that a lot of people use
      with MySQL.
    </p><p>
      We cannot list every possible package here because the list would
      then be way to hard to maintain. For other packages, please refer
      to the software portal at
      <a class="ulink" href="http://solutions.mysql.com/software/" target="_top">http://solutions.mysql.com/software/</a>.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Tim Bunce, Alligator Descartes
        </p><p>
          For the <code class="literal">DBD</code> (Perl) interface.
        </p></li><li class="listitem"><p>
          Andreas Koenig <code class="email">&lt;<a class="email" href="mailto:a.koenig@mind.de">a.koenig@mind.de</a>&gt;</code>
        </p><p>
          For the Perl interface for MySQL Server.
        </p></li><li class="listitem"><p>
          Jochen Wiedmann <code class="email">&lt;<a class="email" href="mailto:wiedmann@neckar-alb.de">wiedmann@neckar-alb.de</a>&gt;</code>
        </p><p>
          For maintaining the Perl <code class="literal">DBD::mysql</code> module.
        </p></li><li class="listitem"><p>
          Eugene Chan <code class="email">&lt;<a class="email" href="mailto:eugene@acenet.com.sg">eugene@acenet.com.sg</a>&gt;</code>
        </p><p>
          For porting PHP for MySQL Server.
        </p></li><li class="listitem"><p>
          Georg Richter
        </p><p>
          MySQL 4.1 testing and bug hunting. New PHP 5.0
          <code class="literal">mysqli</code> extension (API) for use with MySQL
          4.1 and up.
        </p></li><li class="listitem"><p>
          Giovanni Maruzzelli <code class="email">&lt;<a class="email" href="mailto:maruzz@matrice.it">maruzz@matrice.it</a>&gt;</code>
        </p><p>
          For porting iODBC (Unix ODBC).
        </p></li><li class="listitem"><p>
          Xavier Leroy <code class="email">&lt;<a class="email" href="mailto:Xavier.Leroy@inria.fr">Xavier.Leroy@inria.fr</a>&gt;</code>
        </p><p>
          The author of LinuxThreads (used by the MySQL Server on
          Linux).
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="tools-used-to-create-mysql"></a>1.9.4 Tools that were used to create MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660568208"></a><p>
      The following is a list of some of the tools we have used to
      create MySQL. We use this to express our thanks to those that has
      created them as without these we could not have made MySQL what it
      is today.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          Free Software Foundation
        </p><p>
          From whom we got an excellent compiler
          (<span class="command"><strong>gcc</strong></span>), an excellent debugger
          (<span class="command"><strong>gdb</strong></span> and the <code class="literal">libc</code>
          library (from which we have borrowed
          <code class="filename">strto.c</code> to get some code working in
          Linux).
        </p></li><li class="listitem"><p>
          Free Software Foundation &amp; The XEmacs development team
        </p><p>
          For a really great editor/environment.
        </p></li><li class="listitem"><p>
          Julian Seward
        </p><p>
          Author of <code class="literal">valgrind</code>, an excellent memory
          checker tool that has helped us find a lot of otherwise hard
          to find bugs in MySQL.
        </p></li><li class="listitem"><p>
          Dorothea Lütkehaus and Andreas Zeller
        </p><p>
          For <code class="literal">DDD</code> (The Data Display Debugger) which
          is an excellent graphical front end to
          <span class="command"><strong>gdb</strong></span>).
</p></li></ul>
</div>

</div>
<div class="section">
<div class="titlepage">
<div>
<div>
<h3 class="title"><a name="supporters"></a>1.9.5 Supporters of MySQL</h3>

</div>

</div>

</div>
<a class="indexterm" name="idm139899660554016"></a><p>
      Although Oracle Corporation and/or its affiliates own all
      copyrights in the <code class="literal">MySQL server</code> and the
      <code class="literal">MySQL manual</code>, we wish to recognize the
      following companies, which helped us finance the development of
      the <code class="literal">MySQL server</code>, such as by paying us for
      developing a new feature or giving us hardware for development of
      the <code class="literal">MySQL server</code>.
</p>
<div class="itemizedlist">
<ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
          VA Linux / Andover.net
        </p><p>
          Funded replication.
        </p></li><li class="listitem"><p>
          NuSphere
        </p><p>
          Editing of the MySQL manual.
        </p></li><li class="listitem"><p>
          Stork Design studio
        </p><p>
          The MySQL website in use between 1998-2000.
        </p></li><li class="listitem"><p>
          Intel
        </p><p>
          Contributed to development on Windows and Linux platforms.
        </p></li><li class="listitem"><p>
          Compaq
        </p><p>
          Contributed to Development on Linux/Alpha.
        </p></li><li class="listitem"><p>
          SWSoft
        </p><p>
          Development on the embedded <a class="link" href="programs.html#mysqld" title="4.3.1 mysqld — The MySQL Server"><span class="command"><strong>mysqld</strong></span></a> version.
        </p></li><li class="listitem"><p>
          FutureQuest
        </p><p>
          The <a class="link" href="server-administration.html#option_mysqld_skip-show-database"><code class="option">--skip-show-database</code></a>
          option.
</p></li></ul>
</div>

</div>

</div>

</div>
<div class="copyright-footer">

</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left"><a accesskey="p" href="preface.html">Prev</a></td>
<td width="20%" align="center"><a accesskey="u" href="">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="installing.html">Next</a></td>
</tr>
<tr>
<td width="40%" align="left" valign="top"> Preface and Legal Notices</td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top">Chapter 2 Installing and Upgrading MySQL</td>
</tr>
</table>
</div>
</body>
</html>
